Как использовать libcurl для загрузки потоковых данных по HTTP / 2? - PullRequest
0 голосов
/ 01 января 2019

ОПИСАНИЕ

Я работаю над проектом, который использует libcurl с http / 2 для загрузки потоковых данных.

Рабочий процесс:

производитель данных -> буфер -> curl -> сервер.

read_cb, установленный CURLOPT_READFUNCTION, будет извлекать данные из буфера, когда носок будет готов к отправке.

  1. Когда данные извлечения скручивания слишком быстрые, буфер может быть пустым.Пустой буфер может привести к тому, что read_cb вернет 0, тогда я не смогу больше использовать дескриптор curl для отправки данных. ( CURLOPT_READFUNCTION )

  2. Я использую 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);
    ...
}

1 Ответ

0 голосов
/ 01 января 2019

Выполните следующие три шага:

  1. Мне нужно установить nghttp2 с GitHUB с

    sudo apt-get install git g++ make binutils autoconf automake autotools-dev libtool pkg-config \
    zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \
    libjemalloc-dev cython python3-dev python-setuptools
    git clone https://github.com/tatsuhiro-t/nghttp2.git
    cd nghttp2
    autoreconf -i
    automake
    autoconf
    ./configure
    make
    sudo maeke install
    
  2. Обновите curl версию с

    cd ~
    sudo apt-get build-dep curl
    
    wget http://curl.haxx.se/download/curl-7.46.0.tar.bz2
    tar -xvjf curl-7.46.0.tar.bz2
    cd curl-7.46.0
    ./configure --with-nghttp2=/usr/local --with-ssl
    sudo make && make install
    
    echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
    ldconfig
    
  3. Выполните следующую команду

    cur —version
    
...