大部分开发者接触 长连接 概念可能都是通过:
HTTP 1.1 版本默认采用长连接,通过头部的
Connection:Keep-Alive
实现。
通过TCP/IP协议栈的学习,我们知道HTTP其实是基于TCP的应用层协议。实际上HTTP是无状态协议,所谓无状态,就是HTTP一个请求对应一次响应,如果不做一点特殊的操作,服务器不可能知道客户端上一次请求的状态。HTTP 1.1版本使用的Keep-Alive是服务器使用超时策略维护相应的TCP连接,当链路空闲,服务器很快就会断开连接。
概念
短连接:每一次客户端请求-服务端响应的过程都需要建立一个新的连接,也就是说每一次连接都需要经过完整的TCP三次握手、四次挥手。
长连接:一次连接建立,多次使用;也就是说多次连接只需要一轮最开始的三次握手、到连接结束/失效的四次挥手操作。
长轮询:客户端发送请求,服务器不立马响应,而是保持当前连接,直到有数据时才返回。
实际上的长连接、短连接都是TCP层面的概念
使用场景
长连接多用于操作频繁,连接数不太多的情况,如:点对点通讯、数据库连接等,优势是不用每次数据传输都进行繁琐的连接建立过程,坏处是每一个连接的维持都需要耗费服务器的资源:句柄、服务端线程等,如果连接数过多,可能造成服务器资源耗费严重,所以服务器通常会指定允许客户端最大连接数防止这种现象发生。<