国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > WebSocket心跳的實(shí)現(xiàn)

WebSocket心跳的實(shí)現(xiàn)

來源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-11-23 12:21:14 1700713274

一、什么是WebSocket心跳

WebSocket心跳是指通過在客戶端和服務(wù)端之間以固定時(shí)間間隔發(fā)送心跳消息,以確保連接持續(xù)有效的機(jī)制。在WebSocket連接中,由于TCP連接的特性,當(dāng)數(shù)據(jù)傳輸完成后連接并不會馬上關(guān)閉,因此使用心跳可以保證連接在空閑狀態(tài)時(shí)也不被關(guān)閉。

通常情況下,心跳發(fā)送的間隔需要根據(jù)實(shí)際場景進(jìn)行設(shè)計(jì),一般在幾秒鐘到幾分鐘之間,以達(dá)到較好的效果。同時(shí),心跳內(nèi)容也需要特殊處理,以便客戶端和服務(wù)端在接收心跳消息時(shí)可以通過特殊標(biāo)志判斷是否為心跳消息,并及時(shí)回復(fù)確認(rèn)消息。

二、如何在JavaScript中實(shí)現(xiàn)WebSocket心跳

在JavaScript中,可以通過setInterval函數(shù)設(shè)置定時(shí)器,周期性地向服務(wù)端發(fā)送心跳消息。在接收到服務(wù)端的響應(yīng)后,以及在WebSocket關(guān)閉或發(fā)生錯(cuò)誤時(shí),需要清理定時(shí)器,停止心跳消息的發(fā)送。


let heartbeatTimer = null;

function startHeartbeat(ws) {
  // 每5秒向服務(wù)端發(fā)送一次心跳消息
  heartbeatTimer = setInterval(function () {
    let msg = { type: "heartbeat" };
    ws.send(JSON.stringify(msg));
  }, 5000);
}

function stopHeartbeat() {
  clearInterval(heartbeatTimer);
}

三、如何在服務(wù)端實(shí)現(xiàn)WebSocket心跳

在服務(wù)端通常使用定時(shí)器周期性地向所有連接發(fā)送心跳消息。在接收到客戶端的心跳消息后,服務(wù)端需要及時(shí)回復(fù)確認(rèn)消息,以表示連接仍然有效。


let heartbeatTimer = null;

function startHeartbeat(ws) {
  // 每10秒發(fā)送一次心跳消息
  heartbeatTimer = setInterval(function () {
    let msg = { type: "heartbeat" };
    ws.send(JSON.stringify(msg));
  }, 10000);
}

function stopHeartbeat() {
  clearInterval(heartbeatTimer);
}

// WebSocket連接監(jiān)聽
wss.on('connection', function (ws) {
  // 啟動心跳機(jī)制
  startHeartbeat(ws);

  // 監(jiān)聽消息事件
  ws.on('message', function (message) {
    console.log('received: %s', message);

    // 接收到心跳消息,回復(fù)確認(rèn)消息
    if (message === '{"type":"heartbeat"}') {
      ws.send('{"type":"heartbeat_ack"}');
    }
  });

  // 監(jiān)聽關(guān)閉事件
  ws.on('close', function () {
    // 停止心跳機(jī)制
    stopHeartbeat();
  });
});

四、WebSocket系統(tǒng)監(jiān)控

WebSocket系統(tǒng)監(jiān)控是通過監(jiān)測WebSocket連接的狀態(tài),以及管理WebSocket連接的數(shù)量、資源消耗等信息,確保WebSocket系統(tǒng)的穩(wěn)定可靠運(yùn)行。

如下是一個(gè)WebSocket系統(tǒng)監(jiān)控的實(shí)現(xiàn)示例:


// 定義存儲WebSocket連接的數(shù)組
let connections = [];

// WebSocket連接監(jiān)聽
wss.on('connection', function (ws) {
  // 將連接對象加入數(shù)組
  connections.push(ws);

  // 監(jiān)聽關(guān)閉事件
  ws.on('close', function () {
    // 將連接對象從數(shù)組中移除
    connections.splice(connections.indexOf(ws), 1);
  });
});

// 定時(shí)監(jiān)控WebSocket連接狀態(tài)
setInterval(function () {
  let activeCount = 0;

  // 統(tǒng)計(jì)活躍連接數(shù)量
  connections.forEach(function (ws) {
    if (ws.readyState === WebSocket.OPEN) {
      activeCount++;
    }
  });

  // 輸出連接狀態(tài)及數(shù)量
  console.log(new Date(), 'Active:', activeCount, 'Total:', connections.length);

  // 檢查系統(tǒng)負(fù)載情況,如果超過閾值則報(bào)警
  let loadavg = os.loadavg();
  let threshold = 2 * os.cpus().length;
  if (loadavg[0] >= threshold) {
    console.log(new Date(), 'System Overloaded!');
  }
}, 5000);

五、WebSocket高可用方案

WebSocket作為一種基于TCP長連接的協(xié)議,對高可用性的要求比較高。針對WebSocket系統(tǒng)的高可用方案,通常有如下幾種:

六、總結(jié)

WebSocket心跳是保證交互信道持續(xù)可靠的重要機(jī)制,可以通過在客戶端和服務(wù)端之間周期性地發(fā)送心跳消息,來確保連接在空閑狀態(tài)時(shí)不被關(guān)閉。同時(shí),服務(wù)端還需要在接收到客戶端的心跳消息時(shí),及時(shí)回復(fù)確認(rèn)消息。除此之外,系統(tǒng)監(jiān)控和高可用方案也是WebSocket系統(tǒng)開發(fā)和部署中需要重點(diǎn)考慮的問題。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT