温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
聊天聊得正嗨,突然I'M消息发不出去,一看控制台web socket disconnected、网络抖动、切换WiFi、电脑休眠都可能触发断线,如果不做掉线、重连和心跳饱和,用户只能手动刷新页面,体验极差。本次将分享一套生产及外部端即时通信方案,包括心跳检测、饱和加指数、退避重连与英文代码,直接能跑。技术思路核心就是要解决三个问题,一、怎么知道我们连接断了,二、断了怎么重连,三、重连后状态怎么恢复。为什么要生向心跳?很多文章指甲前端定时发品,忽略了后端也要发胖。如果后端不小于心跳,前端无法区分连接正常和连接已断代,TCP还未感知,代码中设置了heartbak timeout超时,未收到任何消息包括PNG就主动断开触发重连,那为什么又指数退避呢?当网络抖动时,如果立即重连,很可能再次失败。指数退避技能快速恢复又能避免重连风暴打怪服务器指数退避指的是。
01:15
比如第一次重连间隔是1秒,第二次重连是1.5秒,第三次12.25秒,以此类推,从而保证在海量用户的情况下,重连能在概率上时均匀分布,而不是集中发起,从而避免瞬间峰值把服务器打垮。那离线消息队列有什么作用呢?因为重连期间用户可能还在发消息,放入队列等等web focus on open事件触发后,批量自动发送I'M消息,注意要做驱虫分泌等处理,避免消息重复。
我来说两句