在网络通信中,当网络链路发生异常,这将会对系统的可靠性产生重大影响。那么怎么监测通信异常呢?这就是心跳机制。那么异常后怎么处理呢?这就是重连机制。
1、何为心跳
顾名思义, 所谓 心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.
2、心跳实现方式
从技术层面看,要解决链路的可靠性问题,必须周期性的对链路进行有效性检测。目前最流行和通用的做法就是心跳检测。
心跳检测机制分为三个层面:
1) TCP层面的心跳检测,即TCP的Keep-Alive机制,它的作用域是整个TCP协议栈;
2) 协议层的心跳检测,主要存在于长连接协议中。例如SMPP协议;
3) 应用层的心跳检测,它主要由各业务产品通过约定方式定时给对方发送心跳消息实现。
不同的协议,心跳检测机制也存在差异,归纳起来主要分为两类:
1) Ping-Pong型心跳:由通信一方定时发送Ping消息,对方接收到Ping消息之后,立即返回Pong应答消息给对方,属于请求-响应型心跳;
2) Ping-Ping型心跳:不区分心跳请求和应答,由通信双方按照约定定时向对方发送心跳Ping消息,它属于双向心跳。
心跳检测策略如下:
1) 连续N次心跳检测都没有收到对方的Pong应答消息或者Ping请求消息,则认为链路已经发生逻辑失效,这被称作心跳超时;
2) 读取和发送心跳消息的时候如果发生了IO异常,说明链路已经失效