长连接和短连接的区别


什么是长连接和短连接

三次握手和四次挥手

TCP 区别于 UDP 最重要的特点是 TCP 必须建立在可靠的连接之上,连接的建立和释放就是握手和挥手的过程。
三次握手为连接的建立过程,握手失败则连接建立失败。
四次挥手为连接的完整释放过程,也会发生某个消息丢失或者超时的情况,有一方主动发送 FIN 消息即表示连接即将释放。
注:SYN、ACK、FIN 消息具有哪些含义,以及连接的状态,请参考《TCP/IP 详解 卷 1》第 18 章。

长连接

长连接,也叫持久连接,在 TCP 层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方(客户端 OR 服务端)主动断开连接,此过程称为一次完整的长连接。HTTP 1.1 相对于 1.0 最重要的新特性就是引入了长连接。

短连接

短连接,顾名思义,与长连接的区别就是,客户端收到服务端的响应后,立刻发送 FIN 消息,主动释放连接。也有服务端主动断连的情况,凡是在一次消息交互(发请求 - 收响应)之后立刻断开连接的情况都称为短连接。
注:短连接是建立在 TCP 协议上的,有完整的握手挥手流程,区别于 UDP 协议。

如何快速区分当前连接使用的是长连接还是短连接

1、凡是在一次完整的消息交互(发请求 - 收响应)之后,立刻断开连接(有一方发送 FIN 消息)的情况都称为短连接

2、长连接的一个明显特征是会有心跳消息(也有没有心跳的情况),且一般心跳间隔都在 30S 或者 1MIN 左右,用 wireshark 抓包可以看到有规律的心跳消息交互(可能会存在毫秒级别的误差)。

什么时候用长连接,短连接?

1、需要频繁交互的场景使用长连接,如即时通信工具(微信 / QQ,QQ 也有 UDP),相反则使用短连接,比如普通的 web 网站,只有当浏览器发起请求时才会建立连接,服务器返回相应后,连接立即断开。

2、维持长连接会有一定的系统开销,用户量少不容易看出系统瓶颈,一旦用户量上去了,就很有可能把服务器资源(内存 / CPU / 网卡)耗尽,所以使用需谨慎。