我已经从 libcurl 主页上阅读了一些示例。当通过 curl_multi_perform 下载时,它总是使用循环监控多句柄,如下所示:
curl_multi_add_handle(multi_handle, easy_handle);
do {
curl_multi_wait(…);
curl_multi_perform(multi_handle, &still_running);
} while (still_running);
这让我在程序部分阻塞
我希望 libcurl 在 easy_handle 的任何一个下载完成后做回调
例如:
- 服务器可以接收请求并将请求解析为 multi_handle 异步下载。
- 服务器在 multi_handle 下载时仍然可以接收请求。 这些是独立的(换句话说是异步的)
最佳答案
通常在循环中调用 curl_multi_perform 来完成所有与 curl 相关的任务,例如 http 事务。
您放置代码的方式不会实现使用 libcurl 的异步方式。有多种方法可以实现。
在典型的实现中,您将拥有主循环,您可能会在其中处理许多任务。例如
do
{
execute task1
execute task2
.............
execute taskn
}
while(condition)
在该循环中,您可以调用 curl_multi_perform。
所以主循环看起来像
do
{
execute task1
execute task2
.............
execute taskn
curl_multi_perform(curlm, &count);
}
while(condition)
这样您就可以完成所有任务并且 curl_multi_perform 会不时被调用,您将实现使用 libcurl 的异步方式。
请检查文档,根据某些返回值,您可能会避免调用 curl_multi_perform(我记得之前读过)。
关于c - 无论如何要避免在 libcurl 中循环监视多句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662072/