好用的websocket 心跳重連js指令碼

温柔的风發表於2024-10-05
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

相關文章