c++ - libcurl 多接口(interface)单一简易接口(interface)多请求

标签 c++ http curl httpclient libcurl

我希望使用 libcurl 进行异步 HTTP 请求。为此,我使用 libcurl 提供的多接口(interface)。我的应用程序将定期收到许多请求,我希望使用单个简单界面并将其添加到多界面。我不打算为每个 http 请求使用新的简单接口(interface)句柄,因为它会打开一个与新 session 的新连接。我需要在单个连接/ session 中发出所有请求。因此,我希望对所有请求使用单个简单的接口(interface)句柄。

使用此模型,我在发出多个 http 请求时遇到问题。第一个请求使用curl_multi_perform 顺利完成。响应已处理。第二个请求未通过curl_multi_perform 完成。当第二次调用curl_multi_perform时,第二个参数running_handles返回为0而不是1。

这是我在高层使用的 API 流程。

curl_easy_init()
curl_multi_init()
curl_multi_add_handle()
curl_multi_perform() // running_handles returned is 1.
//look for response (curl_multi_timeout, curl_multi_fdset, select, curl_multi_info_read, ...)

curl_multi_perform() // This does not work and running_handles returned is 0
...
curl_multi_cleanup()
curl_easy_cleanup()

libcurl 多接口(interface)不能与为一段时间内出现的多个请求添加的单个简单接口(interface)一起使用吗? 请帮忙。提前致谢。

最佳答案

当简单 handle 完成传输并且您想要在后续传输中重复使用同一 handle 时,您需要首先将其从多 handle 中删除( curl_multi_remove_handle )并且(可以设置新选项,然后)使用 curl_multi_add_handle 重新添加它使其开始另一次传输。

但请注意,使用多接口(interface)时,连接池和重用机制由多句柄和简单句柄拥有,因此只要保持多句柄处于事件状态,连接就可以并且将在简单句柄之间重复使用。

关于c++ - libcurl 多接口(interface)单一简易接口(interface)多请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100270/

相关文章:

基于 NodeJS 的 HTTP 客户端 : How to authenticate a request?

php - Apple APNS - 未捕获的异常 : Curl failed: No URL set

php - 如何在php中对curl调用进行单元测试

c++ - 这个小型数据/命令广播应用程序的建议网络拓扑?

http - URL中的分号和问号有什么区别

c++ - 在 C++ 中使用友元函数时需要帮助

objective-c - 将 Torrent info_hash 从 bencoded 数据转换为 URLEncoded 数据

php - 使用 cURL 获取没有正文的 http-statuscode?

包含 ddd 调试器选项的 C++ Makefile

c++ - Qt QTest 执行结束时出现段错误