WebSocket心跳机制
前言:
WebSocket是HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。
1、创建webSocket
// Create WebSocket connection. const socket = new WebSocket('ws://localhost:8080');
2、websocket事件
3、WebSocket方法
WebSocket的心跳机制
问题:
(1)websocket在连接后,如果长时间服务端和客户端不发消息,服务端会把websocket给断开。
(2)存在网络忽然断开的情况,这时服务器端并没有触发onclose的事件。服务器会继续向客户端发送多余的信息,这些数据会丢失。
心跳重连机制
为了解决上面的问题,就需要⼀种机制来检测客户端和服务端是否处于正常的连接状态。因此就有了websocket的心跳机制。
⼼跳机制是客户端每隔⼀段时间会向服务端发送⼀个数据包,告诉服务端自己还活着,同时客户端会根据服务端是否会回传⼀个数据包来确定服务端是否还活着。
如果客户端没有收到回复,表示websocket断开连接或者网络出现问题,就需要重连。
详细代码
如果客户端没有收到回复,表示websocket断开连接或者网络出现问题,就需要重连。
详细代码
const socket = new WebSocket('ws://localhost:8080'); // WebSocket 建立连接 const heartCheck = initHeartCheck();// 初始化心跳检测对象 // WebSocket建立连接成功 socket.addEventListener('open', function (event) { heartCheck.start();// 启动心跳检测 socket.send('Hello Server!'); }); // WebSocket接受到服务端消息 socket.addEventListener('message',function(event){ heartCheck.start();// 启动心跳检测 }) // WebSocket 连接被关闭 socket.addEventListener('close',function(event){ heartCheck.reset();// 启动心跳检测 }) // WebSocket 连接因错误而关闭 socket.addEventListener('error',function(event){ heartCheck.reset();// 启动心跳检测 }) function initHeartCheck() { return { timeout: 2 * 1000, // 每2s向服务端发送一次消息 serverTimeout: 10 * 1000, // 10s收不到服务端消息算超时 timer: null, serverTimer: null, reset() { // 心跳检测重置 clearTimeout(this.timer); clearTimeout(this.serverTimer); this.timer = null; this.serverTimer = null; return this; }, start() { // 心跳检测启动 this.reset(); this.timer = setTimeout(() => { socket.send('ping'); // 定时向服务端发送消息 if (!this.serverTimer) { this.serverTimer = setTimeout(() => { // 关闭连接触发重连 console.log(new Date().toLocaleString(), "not received pong, close the websocket"); socket.close(); //关闭websocket或根据业务需求去重连 }, this.serverTimeout); } }, this.timeout); }, } }
参考文章:vue中使用WebSocket及心跳机制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!