libcurl multi interface single easy interface多个请求

时间:2015-12-05 01:37:11

标签: c++ http curl httpclient libcurl

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

使用此模型,我在制作多个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多接口是否可以使用单个简单接口添加一段时间内的多个请求? 请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:1)

当一个简单的句柄完成了它的传输并且你想重新使用相同的句柄进行后续传输时,你需要先从多个句柄中删除它(curl_multi_remove_handle)和(可能设置新选项和然后用curl_multi_add_handle重新添加它以使其开始另一次传输。

但请注意,在使用多接口时,连接池和重用机制由多手柄和简易手柄所拥有,因此只要您保持多手柄处于活动状态,就可以并且将在简单手柄上重复使用连接。