ОПИСАНИЕ
Я работаю над проектом, который использует libcurl
с http / 2 для загрузки потоковых данных.
Рабочий процесс:
производитель данных -> буфер -> curl -> сервер.
read_cb, установленный CURLOPT_READFUNCTION
, будет извлекать данные из буфера, когда носок будет готов к отправке.
Когда данные извлечения скручивания слишком быстрые, буфер может быть пустым.Пустой буфер может привести к тому, что read_cb вернет 0, тогда я не смогу больше использовать дескриптор curl для отправки данных. ( CURLOPT_READFUNCTION )
Я использую curl_easy_pause
чтобы предотвратить read_cb, верните 0. Я просто хочу приостановить вызов read_cb (только установить CURL_READFUNC_PAUSE), но похоже, что write_cb тоже приостановлен, поэтому я не могу получить данные (могу захватывать данные, полученные wireshark).
ВОПРОС
Какое решение для потоковой загрузки с использованием libcurl?или любой шаг, который я ошибаюсь?
Спасибо за предложение.
мой пример кода:
size_t read_cb(void* ptr, size_t size, size_t nitems, void* userdata) {
Buffer* buf = (Buffer*)userdata;
if (buf->empty())
return CURL_READFUNC_PAUSE;
...
}
size_t Buffer::put(const char* data, size_t* len) {
...
curl_easy_pause(easy_, CURL_READFUNC_PAUSE);
...
}