无论如何要避免在 libcurl 中循环监视多句柄?
anyway to avoid to loop monitor multi handle in libcurl?
我已经从 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 的异步方式。
请查看文档,根据某些 return 值,您可能会避免调用 curl_multi_perform(我记得以前读过)。
我已经从 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 的异步方式。
请查看文档,根据某些 return 值,您可能会避免调用 curl_multi_perform(我记得以前读过)。