使用 libcurl 多接口连续请求相同的“简单”句柄

Jen*_*ner 5 c++ multithreading libcurl

我的开发组织有自己的线程和 select() 包装器实现。需要增强应用程序以执行 HTTPS 请求,我决定使用 libcurl。经过一番研究,我发现curl_easy_perform是一个阻塞调用,因此我决定使用curl_multi_perform方法进行非阻塞调用,以允许线程中的其他工作。

需要定期对同一 URL 执行 HTTPS 请求。我知道我可以保留相同的curl_easy 句柄并将其提供给curl_multi 句柄。我将执行curl_multi_perform来获取结果,但稍后我需要使用curl_multi_perform重新发送请求,比如在5分钟内。因此,这将是使用相同简单句柄的连续请求。但是,我不确定在收到第一个请求的结果后,curl_easy 接口如何告诉多接口何时重新发送请求。我该如何实现这个目标?

(也许可以从多句柄中删除简单句柄,然后在再次需要请求时将其重新添加到多句柄中?)

我认为无论使用什么技术,传出请求都将使用相同的传出端口。

And*_*ert 1

(也许可以从多句柄中删除简单句柄,然后在再次需要请求时将其重新添加到多句柄中?)

正确的。来自 libcurl文档

当单次传输完成后,简易手柄仍会添加到多堆栈中。您需要首先使用curl_multi_remove_handle删除简单句柄,然后使用curl_easy_cleanup将其关闭,或者可能为其设置新选项并使用curl_multi_add_handle再次添加它以开始另一次传输。

我认为无论使用什么技术,传出请求都将使用相同的传出端口

这是无法保证的。libcurl 将尝试重用与 Easy Handle 关联的现有连接,但如果先前的连接已经失效,则将建立具有不可预测的本地端口的新连接。