描述
我正在使用一个将libcurl
与http / 2结合使用的项目,以上传流数据。
工作流程为:
数据生成器->缓冲区-> curl->服务器。
当袜子准备发送时,由CURLOPT_READFUNCTION
设置的read_cb将从缓冲区中获取数据。
当curl太快地获取数据时,缓冲区可能为空。空缓冲区会导致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);
...
}
答案 0 :(得分:0)
请遵循以下三个步骤:
我需要安装nghttp2
from 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
使用
升级您的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
执行以下命令
cur —version