libcurl多接口单易接口多请求

libcurl multi interface single easy interface multiple requests

本文关键字:接口 请求 单易 libcurl      更新时间:2023-10-16

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

使用这个模型,我在发出多个http请求时遇到了问题。第一个请求使用curl_multi_perform顺利通过。已处理响应。第二个请求没有通过curl_multi_perform。当第二次调用curl_multi_perform时,第二个参数running_hands返回为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多接口不能与为一段时间内的多个请求添加的单个简单接口一起使用吗?请帮忙。提前谢谢。

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

但请注意,在使用多接口时,连接池和重用机制由多句柄和易句柄所有,因此只要您保持多句柄的活动状态,连接就可以并且将在易句柄之间重复使用。