`
xcxinghai
  • 浏览: 33366 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

http 连接复用

阅读更多

定义

Http/1.0每次请求都需要建立新的TCP连接,连接不能复用。Http/1.1新的请求可以在上次建立的tcp连接之上发送,连接可以复用。

优点

减少重复进行tcp三次握手的开销,提高效率。注意:在同一个tcp连接中,新的请求需要等上次请求收到响应后,才能发送。

实现

自己写了一个http下载页面的工具,url是以文件的形式批量的进行下载的。支持连接复用下载。

主要的思路

在发送http的请求头中设置Connection: keep-alive。

当前的url与上一次下载的url之间进行对比,如果host相同的话,则用上一次的socket_id。否则关闭上一次的socket,重新连接服务器,获取新的socket。所以,url的文件,需要进行排序,将同一个站点的url放在一起即可。

ps:这里实现的形式比较的简单。复杂一点,可以用一个map,std::map<std::string host,int socket_id>,对host的socket_id进行映射。但是这里需要关注map的<host,socket_id>的失效时间,不能昨天建立的连接一直不关闭,今天仍然在使用,服务器端会有最大的连接时间的限制。例如tomcat中有个 maxKeepAliveRequests属性.默认值是100,该属性表示当同一个连接的请求达到maxKeepAliveRequests的值时会自动断开这个连接.。多线程的话,还需要关注该socket_id是否正在使用,发送和接收数据。

测试集合

http://news.qq.com/a/20130824/006645.htm

http://news.qq.com/a/20130825/000112.htm

http://news.qq.com/a/20130824/005661.htm

http://view.news.qq.com/intouchtoday/index.htm?2529

http://www.163.com/

测试结果

第二条和第三条url是使用第一条的socket_id进行下载,下载成功。

1

服务器端超时关闭测试

用了比较笨的方法,在下载每个url中间sleep的方法,来测试长连接关闭的时间,因为本客户端在url下载完之前是不会close(socket_id)的,所以出现连接关闭,应该是服务器端主动关闭的。

测试站点:news.qq.com

当sleep的时间超过30s,tcp连接的状态会从ESTABLISHED变成CLOSE_WAIT。同时用这个socket_id再向服务器端发送数据,也不会收到服务器端的响应。

当sleep的时间为29s,或者小于29s。复用连接下载正常。

由于程序有其他的一些运行的耗时,所以推测news.qq.com的长连接的超时时间是30s。对于长连接来说,超过30s之后,服务器端就会主动断开连接。Http的连接复用也就无法获取结果了。

所以,对于http连接复用,最大的难点也就是准确的获取每个站点的长连接的最大限制时间。超过最大限制时间就必须进行重连,不然会导致请求无反映的情况。

代码下载,请看博客

 

原创文章,转载请注明:转载自成长的企鹅

本文链接地址:http 连接复用

关于我:成长的企鹅简介

 

分享到:
评论

相关推荐

    golang http连接复用方法

    在Golang中,HTTP连接复用是一种优化网络性能的技术,它允许HTTP客户端和服务器在完成一个请求后保持连接打开,以便后续的请求可以重用相同的连接,而不是每次都建立新的TCP连接。这大大减少了网络延迟,提高了应用...

    http下载器,连接复用技术

    连接复用技术是HTTP协议中的一个重要特性,尤其在HTTP 1.1版本中得到了广泛应用,它旨在提高网络性能,减少延迟,并降低服务器与客户端之间的通信开销。本篇文章将深入探讨连接复用及其在HTTP下载器中的应用。 首先...

    多进程&多路复用并发的http服务器

    2. **连接复用**:使用`epoll`等技术监控所有连接,当有新数据到达时,触发事件响应。 3. **请求处理**:事件被触发后,Nginx选择一个空闲的工作进程来处理该连接,并将请求数据发送给它。 4. **内容生成**:工作...

    在C#中实现Socket端口复用

    可以通过设置TCP/IP配置来调整这个等待时间,但这可能会带来其他问题,如连接复用错误。因此,合理设计服务器逻辑和连接管理策略是必要的。 总的来说,C#中的Socket端口复用是通过设置SocketOptionName....

    requests-2.4.2-py2.py3-none-any.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-2.4.3-py2.py3-none-any.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-2.4.1.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-2.4.1-py2.py3-none-any.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-0.13.2.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-0.8.7.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-2.3.0-py2.py3-none-any.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-2.0.0.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-0.7.2.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-0.14.2.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-2.2.1-py2.py3-none-any.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-0.12.1.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-0.8.2.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-2.5.3-py2.py3-none-any.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-2.2.1.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

    requests-0.8.1.tar.zip

    Keep-Alive & 连接池:支持HTTP连接复用,提高请求效率。 国际化域名和URL:支持国际化域名和URL的解析和请求。 带持久Cookie的会话:支持Cookie的持久化,方便处理需要登录的网站。 浏览器式的SSL认证:提供类似于...

Global site tag (gtag.js) - Google Analytics