无论如何要避免在libcurl中循环监视多句柄?

时间:2017-04-27 15:32:43

标签: c linux 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时接收请求。 那些是独立的(换句话说是异步的)

1 个答案:

答案 0 :(得分:1)

通常在循环中调用 curl_multi_perform 来完成所有与卷曲相关的任务,例如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(我记得以前读过它)。