[关闭]
@946898963 2018-05-25T02:13:55.000000Z 字数 1891 阅读 1364

HTTP的长连接

HTTP


什么是HTTP长连接,短连接

短连接
在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
长连接
在HTTP/1.1中,默认使用的是长连接。HTTP长连接,与一般每次发起http请求或响应都要建立一个tcp连接不同,http长连接利用同一个tcp连接处理多个http请求和响应,也就是说建立了一个连接后可以进行多次的HTTP请求。也叫HTTP keep-alive,或者http连接重用。使用http长连接可以提高http请求/响应的性能。

补充

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

TCP连接的三次握手四次断开过程描述下,意在表明连接跟断开耗时

TCP短连接
建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接
TCP长连接
建立连接——数据传输...(保持连接)...数据传输——关闭连接

长连接优缺点:
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。

短连接优缺点:
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

关于TCP/IP的长连接,建议阅读:TCP长连接与短连接、心跳机制

这里有个问题,那就是TCP自己已经有心跳机制了,为什么还要在应用层里仍然还要考虑心跳?
在以TCP为连接方式的服务器中,为什么在服务端设计当中需要考虑心跳? - 郭无心的回答 - 知乎
原因:当一台智能手机连上移动网络时,其实并没有真正连接上Internet,运营商分配给手机的IP其实是运营商的内网IP,手机终端要连接上Internet还必须通过运营商的网关进行IP地址的转换,这个网关简称为NAT(NetWork Address Translation),简单来说就是手机终端连接Internet其实就是移动内网IP,端口,外网IP之间相互映射。相当于在手机终端在移动无线网络这堵墙上打个洞与外面的Internet相连。由于大部分的移动无线网络运营商为了减少网关NAT映射表的负荷,如果一个链路有一段时间没有通信时就会删除其对应表,造成链路中断。TCP的心跳时间间隔很长,默认是两个小时,如果使用TCP的固有的心跳,连接很容易被断开,所以为了防止连接被释放,仍然在应用层重新实现了心跳机制。

怎么保持长连接

维护任何一个长连接都需要心跳机制,客户端发送一个心跳给服务器,服务器给客户端一个心跳应答,这样就形成客户端服务器的一次完整的握手,这个握手是让双方都知道他们之间的连接是没有断开,客户端是在线的。如果超过一个时间的阈值,客户端没有收到服务器的应答,或者服务器没有收到客户端的心跳,那么对客户端来说则断开与服务器的连接重新建立一个连接,对服务器来说只要断开这个连接即可。

怎么选择是长连接还是短连接

长连接优缺点:
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接,但是为了维持长连接,需要消耗过多的资源。
使用场景:
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

短连接优缺点:
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。
使用场景:
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

结语
长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注