【问题标题】:C++ library for dealing with multiple HTTP connections用于处理多个 HTTP 连接的 C++ 库
【发布时间】:2011-07-14 02:35:41
【问题描述】:

我正在寻找一个库来处理多个并发 HTTP 连接(首选在单个线程上)以在 Windows 中的 C++ 中使用,以便它可以基于 Win32 API。这适用于必须处理请求列表但始终保持 4 个请求运行直到列表完成的客户端应用程序。

到目前为止,我已经尝试过 cURL(多界面),这似乎是我发现的最合适的,但我的问题是我可能有 200 个请求的队列,但我一次只需要运行 4 个.当一个请求可能需要 2 秒而另一个请求可能需要 2 分钟时,这会成为问题,因为您必须等待所有句柄并在一个块中接收所有请求的结果。如果有人知道如何解决这个问题,那将非常有用。

我也尝试过使用 WinHTTP 滚动自己,但我需要限制请求,因此理想情况下它们需要位于单个线程上,并对 WinHTTP 不执行的数据使用回调。

我发现可以解决我所有问题的最好方法是 ASIHTTPRequest,但不幸的是它仅适用于 Mac OSX。

谢谢, J

【问题讨论】:

    标签: c++ winapi http curl


    【解决方案1】:

    你看过 boost.asio 吗? http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio.html

    它旨在很好地扩展并具有 http 服务器示例: http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/examples.html

    【讨论】:

    • 谢谢,我查看了 boost.asio,似乎我会遇到与 libcurl 相同的问题。它是否能够在单个线程上保持恒定的 4 个请求?即在一个完成时收到通知,无需等待所有请求完成即可启动另一个?
    • @JWood,没有做太多服务器编程(只是使用 asio 设置与设备的单个连接)对不起。
    • 没问题,虽然我正在处理的不是服务器,而是客户端。
    • @JWood:不明白你所说的“保持恒定的 4 个请求......”是什么意思,但异步编程模型的重点是你启动异步。操作并在每个操作完成时收到通知。因此,一旦一个操作完成,您就可以在处理程序中启动另一个操作,而无需等待其他未完成的异步操作完成。
    【解决方案2】:

    您尝试过 Boost Asio 吗? 是多平台和出色的性能,并且有很好的 HTTP 示例。

    http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio.html

    【讨论】:

      【解决方案3】:

      Asio 是一个很棒的库,但它是通用的,HTTP 示例就是这样:示例,不支持重定向、身份验证等。
      我知道在 Boost 和 Asio 之上构建的两个库支持 HTTP 协议:cpp-netlibPion Network Library 但 AFAIK 既不直接支持你想要的。
      综上所述,如果您对使用 libcurl 感到满意,那么使用带有回调的“简单”接口并自己实现请求队列应该很容易。

      【讨论】:

        【解决方案4】:

        libcurl 的多接口完全支持您的要求。

        【讨论】:

          猜你喜欢
          • 2012-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多