消息丢失处理方案:
1、后台通过websocket传输给前端消息,并且后台生成校验此消息的定时任务,设置每5秒重发 2、前端接收到消息后将消息通过websocket传输给后台 3、后台如接收到前端的消息则删除对应的发送消息定时任务,如未收到消息则继续发送,设置最多发送5次(超过5次默认认为此条消息记录有误) 4、建议:建议websocket发送消息单独为一个模块,防止定时任务过多抢占服务内存情况发生。
前端监听心跳处理方案:
websocket连接上 1、申请一个变量heartbeatStatus,记录当前心跳检测状态,有三个状态:等待中,已收到应答、超时。 2、监听WS实例的message事件,监听到就将heartbeatStatus改为:已收到应答。 3、监听WS实例的open事件,打开后启动心跳检测。 一般需要在计时器中监听,定时发送心跳检测信息,服务器端接收到心跳包信息,通过websocket发送信息给客户端,客户端修改心跳状态;如果两个以上的心跳包都没有得到反馈,则表示掉线,需要重新连接websocket。 // 发送消息,用来发送心跳包 WS.send('hello'); // 关闭连接,当发送心跳包不响应,需要重连时,最好先关闭 WS.close(); 注意: 心跳检测异常,但close事件没有触发,大概率是双方之间的网络线路不佳,如果立马进行重连,会挤兑更多的网络资源,重连的失败概率更大,也可能阻塞用户的其它操作。 但也不排除确实是连接的问题,如服务器宕机、意外重启,同时没有告知浏览器需要把旧连接关闭。 所以一发生心跳不应答,个人推荐的做法是,发生延迟后,提醒用户网络异常正在修复中,让用户有个心理准备。然后多发一两个心跳包,连续不应答再提示用户掉线了,是否重连。如果中途正常了,就不需要重连,用户体验更好,对服务器的压力也更小。
标签:websocket,处理,前端,发送,消息,心跳,监听 From: https://www.cnblogs.com/zha-hdlxdl/p/17819090.html