应用背景
理论上基于TCP建立长链接后,通信通道是不会自动断开的。但是现实情况是很复杂的,比如突然切换网络。那都有什么情况下会使通信失去链接呢。主要有一下几方面
- 长连接的进程被杀死
- NAT超时(内网IP转为外网IP过程)
- 网络状态(切换网络,网络状态极差)
如何使长连接保活
进程保活
针对进程被杀死的保活机制
- 提升进程权限
- 拉起被杀死的进程
加入心跳机制
针对NAT超时采取的保活机制
- 心跳包的约定
- 心跳包的时间间隔
- 如果双方几次心跳接收失败可断定连接已断开。
断线重连
针对网络断掉采取的保活机制, 这个机制的触发,主要也是根据心跳原理
心跳与轮询的区别
- 相同点:都是经过一段时间去请求一次服务器
- 不同点: 心跳是采取保活的机制,发送的数据随便定义,它是直接在当前长连接基础上进行发送数据。而轮询是为了保证信息的实效性,间隔时间去拉取数据,每次发送请求都会重新生成一个连接(TCP握手机制)
End
ps:一下额外记录知识,跟标题没任何关系
轮询
- 短轮询 客户端发起请求,不管服务端有没有数据更新都会响应客户端
- 长轮询 如果服务端没有信息更新,暂时不响应,直到有信息更新才响应到客户端。