【问题标题】:Asynchronous Request Handling Using Multithreading使用多线程处理异步请求
【发布时间】:2019-03-28 05:40:39
【问题描述】:

我正在开发一个模块,该模块使用 10 个队列来处理线程,每个线程都使用 curl_easy 接口(以及 Lock)发送 curl 请求,以便;保持一个连接,直到没有收到响应。我想通过使用 curl_multi 接口来增强请求处理,其中 curl 请求由线程发送并以并行方式处理。

我创建了一个单独的代码来实现它。例如,我创建了 3 个线程,逐个处理,第一个线程向 curl_multi 发送请求,直到它运行并且存在传输,它使用 curl_easy 接口为每次传输分配资源。

我已经浏览了很多示例,但无法弄清楚如何在 C++ 中实现它。另外,因为我最近在 C++ 中学习了多线程和 curl 概念,所以我需要有关方法的帮助。

我希望单个线程应该能够发送 curl 请求,直到用户不停止发送。

更新 - 我添加了两个线程,每个线程同时发送两个请求。 curl_multi 由一组句柄处理,用于 curl_easy。 我想让它没有数组,因为这限制了请求的数量。

是否可以使其异步并仅在客户端/用户接受所有传输并退出时才退出。 curl_multi 有足够多的例子,所以我不清楚它的实现。

【问题讨论】:

    标签: c++ multithreading asynchronous curl curl-multi


    【解决方案1】:

    阅读curl_multidocumentation,您似乎不必为此创建不同的线程,因为它通过添加到多句柄对象的多个简单句柄来工作。然后您调用curl_multi_perform 以非阻塞方式开始所有传输。

    我希望单个线程应该能够发送 curl 请求,直到用户不停止发送。

    我不明白你的意思,你的意思是你只想让这些连接保持活跃,直到一切都被转移?如果是这样,curl_multi 已经为您提供了有关转移进度的信息,这可以帮助您确定要做什么。

    希望对你有帮助

    【讨论】:

    • 感谢您的回复!是的,我想让连接保持活动状态,直到所有请求都被转移并收到他们的响应。不同的线程仅用于之前使用的负载分配。
    • @NabeelaRizvi 我会查找链接的文档,因为它解释了您可以使用的两种不同的实现,以及与它们中的每一个相关的功能和对象。这可能有助于选择最适合您的解决方案。无论如何,curl_multi_perform 可以被多次调用(我猜这会导致请求被重新发送)以完成传输。
    猜你喜欢
    • 2018-05-27
    • 2019-03-26
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    相关资源
    最近更新 更多