【问题标题】:libcurl multi asynchronous supportlibcurl 多异步支持
【发布时间】:2023-03-21 23:10:01
【问题描述】:

从示例和文档中,似乎 libcurl 多接口在批处理模式下提供异步支持,即简单的句柄被添加到多,然后最终请求与 curl_multi_socket_action 同时触发。是否可以触发请求,当添加了简单句柄但在请求写入套接字后控制返回到应用程序?

编辑: 它将有助于在以下模型中触发请求,而不是批量触发请求(假设在客户端创建请求并在服务器上处理需要相同的持续时间)
客户----|-----|-----|-----|
服务器 |-----|-----|-----|----|

【问题讨论】:

    标签: libcurl


    【解决方案1】:

    一旦多接口会阻塞,它就会立即将“控制”返回给应用程序。因此它也会在发出请求后返回控制权。

    但我猜你是在问如何才能准确地确定请求何时发送?我认为这只有通过使用CURLOPT_DEBUGFUNCTION 并查看请求何时发送才能真正实现。不是很方便的方式...

    【讨论】:

    • 谢谢丹尼尔。我想知道何时发送请求。而不是批量触发请求,我正在考虑以下模型(假设在客户端创建请求并在服务器上处理需要相同的持续时间)
      客户端----|-----|---- -|-----|
      服务器|-----|-----|-----|----|
    • 对不起。我不确定如何格式化帖子。除了以批处理模式触发请求之外,我还想探索其他模型。一种选择是在前一个请求写入套接字后触发请求。但我认为这些方法在理论上没有太大区别。
    • 丹尼尔,我查看了源代码。看起来状态在每个简单的句柄中都保持不变。似乎 CURLM_STATE_DO_DONE 表示请求传输完成。而不是 CURLOPT_DEBUGFUNCTION,为了我们的内部使用,我正在计划一个补丁来启用简单处理的状态查找。您认为这种方法有什么问题吗?
    • 可以做到,是的,我曾努力添加该信息,但从未完成/合并。我可以看到我们重新开始工作,你可以帮忙!请参阅此补丁作为起点:curl.haxx.se/mail/lib-2013-08/0028.html
    • 谢谢丹尼尔。这很有用。我会调查一下。
    【解决方案2】:

    您可以查看以下文件: https://curl.haxx.se/libcurl/c/hiperfifo.html

    它与 libevent 和 libcurl 结合使用。 运行时,程序创建命名管道“hiper.fifo”

    只要有输入到fifo,程序就会以列表的形式读取输入 的 URL 并创建一些新的简单句柄来通过 curl_multi "hiper" API。

    fifo 缓冲区几乎可以立即处理,因此您甚至可以在之前的请求仍在下载的同时添加更多 URL。

    然后libcurl会通过调用curl_multi_socket_action异步下载所有简单的句柄,所以控制权会返回给系统。

    【讨论】:

    猜你喜欢
    • 2015-11-04
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    相关资源
    最近更新 更多