var wsUrl = 'ws://' + (document.domain || '127.0.0.1') + ':8282'; var ws = null; // WebSocket 物件 var heartbeatTimer = null; // 心跳定時器 var isReconnect = true; // 是否自動重連 // 建立 WebSocket 連線 // @auth https://so.csdn.net/so/ai function createWebSocket() { if ("WebSocket" in window) { ws = new WebSocket(wsUrl); // WebSocket 開啟事件 ws.onopen = function () { console.log("WebSocket 已連線"); // 開始心跳定時器 startHeartbeat(); }; // WebSocket 收到訊息事件 ws.onmessage = function (evt) { console.log("WebSocket 收到訊息:" + evt.data); }; // 發生錯誤回撥 ws.onerror = function (e) { console.log('WebSocket錯誤:', e); } // WebSocket 關閉事件 ws.onclose = function () { console.log("WebSocket 已關閉"); // 停止心跳定時器 stopHeartbeat(); // 斷線後自動重連 if (isReconnect) { setTimeout(function () { console.log("WebSocket 嘗試重新連線"); createWebSocket(); }, 3 * 1000); } }; } else { console.log("該瀏覽器不支援 WebSocket"); } } // 傳送訊息 function sendMessage(message) { if (ws != null && ws.readyState == WebSocket.OPEN) { ws.send(message); console.log("WebSocket 傳送訊息:" + message); } else { console.log("WebSocket 連線沒有建立或已關閉"); } } // 開始心跳定時器 function startHeartbeat(interval) { interval = interval || 30; heartbeatTimer = setInterval(function () { sendMessage("heartbeat"); }, interval * 1000); } // 停止心跳定時器 function stopHeartbeat() { clearInterval(heartbeatTimer); } // 啟動 WebSocket 連線 createWebSocket();
摘自:https://blog.csdn.net/weixin_52634104/article/details/133075166