我希望使用 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/