关于HTTP请求的keep-alive

在HTTP1.1之后Connection默认为keep-alive,俗称长连接。那么为什么要用长连接,回答这个问题之前,我们先来聊聊网络的通讯协议,众所周知,HTTP是基于TCP协议的,HTTP请求之前需要经过TCP连接的3次握手,如下:
图片来源于互联网

所以为了请求更快,避免每次都产生TCP三次握手,就需要复用TCP连接,从而减小每次网络请求时间。下图为非共享session
图片来源于互联网
下图为共享session
图片来源于互联网
很明显,答案已经明了了。共享的Session将会复用TCP的连接,而每次都新建Session的操作将导致每次的网络请求都开启一个TCP的三次握手。
从上面两张图,我们可以清晰地看到,同样都是两次HTTP请求,共享Session的代码在第二次网络请求时少了TCP的三次握手的过程。即加速了整个网络的请求时间。

事实上,Apple对每个Host的连接数是依规定的,如下:

1
2
3
This property determines the maximum number of simultaneous connections made to each host by tasks within sessions based on this configuration.
This limit is per session, so if you use multiple sessions, your app as a whole may exceed this limit. Additionally, depending on your connection to the Internet, a session may use a lower limit than the one you specify.
The default value is 6 in macOS, or 4 in iOS.

详见官方文档

可以看出来对于iOS每个域名的最大连接数是4,macOS为6,所以如果不共享session,很可能会超过这个数,所以尽量使用keep-alive,这样不仅仅可以提高速度。

####其他
长连接和长、短轮询的区别

  1. 短轮询:重复发送Http请求,查询目标事件是否完成,优点:编写简单,缺点:浪费带宽和服务器资源
  2. 长轮询:在服务端hold住Http请求(死循环或者sleep等等方式),等到目标时间发生,返回Http响应。优点:在无消息的情况下不会频繁的请求,缺点:编写复杂

谢谢!

支付宝
微信
本站总访问量 本文总阅读量 您是第个小伙伴