我正在编写一个C ++应用程序,并希望同时通过HTTP GET请求请求多个数据文件,我应该在哪里开始(需要跨平台)。
您建议我使用哪些图书馆? libcurl的? curlpp?提升asio?我是否需要滚动自己的多线程来同时请求所有文件?有更简单的方法吗?
编辑:我需要同时请求大约1000个GET请求。我很可能会批量执行此操作(一次100个,并创建更多连接,因为一个已完成)。
答案 0 :(得分:4)
我会推荐libcurl。我对它并不十分熟悉,但它确实有一个multi-interface来执行多个同步HTTP操作。
根据您使用的解决方案,可以在不使用多线程的情况下执行异步I / O.关键是使用select(2)
系统调用。 select()
获取一组文件描述符,并告诉您是否有任何数据可用。如果他们这样做,您可以继续使用read(2)
或recv(2)
,而无需担心阻止。
答案 1 :(得分:2)
Web浏览器通常会维护一个工作线程池来进行下载,并在它们空闲时为其分配下载。 IIRC,HTTP RFC可以说明你应该同时为同一台服务器建立多少个同时连接:太多是粗鲁的。
如果有几个请求是同一个服务器,并且它支持keep-alive(几乎每个人都这样做),那么这可能比通过多个同时请求发送垃圾邮件更好。一般的想法是您为串行的多个请求使用一个TCP / IP连接,从而节省了握手开销。根据我实现Java HTTPConnection类的经验,实际结果是你引入了一个微妙的错误,当你为新请求重新使用连接时并不总是正确地清除状态,并花费大量时间盯着日志/嗅探器数据; - )
libcurl肯定支持keepalive(我认为默认启用)。