我正在编写一个C ++应用程序,并希望同时通过HTTP GET请求请求多个数据文件,我应该在哪里开始(需要跨平台)。

  1. 运行应用程序
  2. 创建网址列表{" http://host/file1.txt "," ; http://host/file2.txt "," http://host/file3.txt "}
  3. 同时请求所有URL并将内容加载到变量(不想要磁盘写入)。每个文件大约有10kB的数据。
  4. 您建议我使用哪些图书馆? libcurl的? curlpp?提升asio?我是否需要滚动自己的多线程来同时请求所有文件?有更简单的方法吗?

    编辑:我需要同时请求大约1000个GET请求。我很可能会批量执行此操作(一次100个,并创建更多连接,因为一个已完成)。

有帮助吗?

解决方案

我建议 libcurl 。我不是很熟悉它,但确实有多界面用于执行多个同步HTTP操作。

根据您使用的解决方案,可以在不使用多线程的情况下执行异步I / O.关键是使用 select(2) 系统呼叫。 select()获取一组文件描述符,并告诉您是否有任何数据可用。如果他们这样做,您可以继续使用 read(2) recv(2),而不必担心阻塞。

其他提示

Web浏览器通常会维护一个工作线程池来进行下载,并在它们空闲时为其分配下载。 IIRC,HTTP RFC可以说明你应该同时为同一台服务器建立多少个同时连接:太多是粗鲁的。

如果有几个请求是同一个服务器,并且它支持keep-alive(几乎每个人都这样做),那么这可能比通过多个同时请求发送垃圾邮件更好。一般的想法是您为串行的多个请求使用一个TCP / IP连接,从而节省了握手开销。根据我实现Java HTTPConnection类的经验,实际结果是你引入了一个微妙的错误,当你为新请求重新使用连接时并不总是正确地清除状态,并花费大量时间盯着日志/嗅探器数据; - )

libcurl肯定支持keepalive(我认为默认启用)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top