长连接与短连接

短连接、keepalive、长连接,相信有很多人分不清楚这三个概念。包括本人在写下这句话的时候。

短连接

短连接可能是大部分人最长接触到的,也比较容易理解:

  1. 建立连接
  2. 数据交互
  3. 关闭连接

短连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。每个 TCP 连接的建立都需要三次握手,每个 TCP 连接的断开要四次挥手。适用于并发量大,但是每个用户又不需频繁操作的情况。

但是在用户需要频繁操作的业务场景下(如新用户注册,网购提交订单等),频繁的使用短连接则会使性能时延产生叠加。

keepalive

通过Http1.1默认开启Keep Alive(http1.0 1.1 2.0),我们可以让一条Http连接保持不被立即关闭。有些同学这时就疑惑了,是不是长连接就是Keep Alive呢?

其实不是的。长连接我们也叫TCP长连接,它是架设在TCP协议上的,而上面说的Keep Alive是Http协议的内容,连协议都不同,两者自然不是一个东西。

开启了Keep Alive是Http连接,我们也称之为持久连接,和长连接并不同。感兴趣可参考此文:《TCP 进阶》

长连接

长连接与持久连接本质上非常的相似,持久连接侧重于 HTTP 应用层,特指一次请求结束之后,服务器会在自己设置的 keepalivetimeout 时间到期后才关闭已经建立的连接。长连接则是 client 方与 server 方先建立连接,连接建立后不断开,然后再进行报文发送和接收,直到有一方主动关闭连接为止。

1
2
3
4
5
长连接的适用场景也非常的广泛:
监控系统:后台硬件热插拔、LED、温度、电压发生变化等;
IM 应用:收发消息的操作;
即时报价系统:例如股市行情 push 等;
推送服务:各种 App 内置的 push 提醒服务;

参考文献

  1. Android 架构之长连接技术
  2. 《TCP 进阶》