websocket改变了传统web项目请求响应的数据传输模型,实现了服务器与客户端之间的双向通信。其中服务器主动发送消息给客户端是它最重要的一点。
在一段时间的使用过程中,我们发现客户端与服务端之间的websocket连接可能会中断。目前发现的原因是nginx会中断60s内未通信的连接,虽然可以通过修改nginx配置文件让这个时间更长,但是终归不是最合理的解决方案。
这个时候心跳机制和断线重连机制就派上用场了。我们是这样做的,客户端定时给服务端发送ping,服务端收到ping消息给客户端返回pong。
如果客户端在发送ping以后的一定时间内收不到来自服务器的pong消息,则启动重连流程。通过这种心跳机制保证客户端与服务端的连接始终处于活跃状态。
这里面需要注意客户端定时器的开启时机以及关闭时机。如果不再合适的时机关闭定时器,客户端会越来越卡,直至内存溢出。