WebSocket のハートビートはどのような問題を解決しますか?

WebSocket のハートビートはどのような問題を解決しますか?


ウェブソケット

WebSocket は、クライアントとサーバーの間に永続的な接続を確立するためのプロトコルであり、これにより、双方がリアルタイムでデータを交換できるようになります。WebSocket の接続は長時間維持されるため、接続の安定性と信頼性を確保するための仕組み、それがハートビート機構です。

ハートビート メカニズムとは、接続を維持するためにいくつかのデータ パケットを定期的に送信することを指します。WebSocket 接続では、ハートビート パケットは通常、空のメッセージまたは特定の識別子です。送信者は定期的にハートビート パケットを受信者に送信し、受信者はハートビート パケットを受信するとすぐに確認メッセージで応答します。このようにして、接続がまだアクティブであるかどうかを検出できます。

1. ハートビート メカニズムの主な機能は次のとおりです。

接続の安定性を確保する: ネットワーク環境が不安定なため、ネットワーク障害やサーバーの再起動など、さまざまな理由で WebSocket 接続が切断される可能性があります。ハートビート メカニズムを通じて、接続が時間内に切断されたかどうかを確認し、対応する措置を講じることができます。

無効なトラフィックの削減: WebSocket 接続は長時間維持されるため、ハートビート メカニズムがないと、接続の両方の当事者がデータ パケットの送受信を続けることになり、大量の無効なトラフィックと帯域幅の浪費が発生します。ハートビート機構により、接続を維持したまま無効なトラフィックの発生を軽減し、データ送信の効率を向上させることができます。

接続の信頼性の向上: ハートビート メカニズムは、接続が切断されたかどうかを適時に検出できるため、接続の切断によるデータ送信の中断とデータ損失を軽減し、接続の信頼性を向上させることができます。

2、コード

const socket = new WebSocket('ws://localhost:8080');
const heartbeatInterval = 5000; // 心跳间隔时间,单位:毫秒
let heartbeatTimer = null; // 心跳定时器

socket.onopen = () => {
    
    
  console.log('WebSocket连接已打开');
  startHeartbeat();
};

socket.onmessage = (event) => {
    
    
  console.log(`接收到消息:${
      
      event.data}`);
};

socket.onclose = () => {
    
    
  console.log('WebSocket连接已关闭');
  stopHeartbeat();
};

socket.onerror = (error) => {
    
    
  console.error(`WebSocket连接发生错误:${
      
      error}`);
  stopHeartbeat();
};

function startHeartbeat() {
    
    
  heartbeatTimer = setInterval(() => {
    
    
    if (socket.readyState === WebSocket.OPEN) {
    
    
      socket.send('heartbeat'); // 发送心跳包
    } else {
    
    
      stopHeartbeat();
    }
  }, heartbeatInterval);
}

function stopHeartbeat() {
    
    
  clearInterval(heartbeatTimer);
  heartbeatTimer = null;
}

上記のコードでは、ハートビート間隔を表すために heartbeatInterval 変数を定義し、次にハートビート タイマーを表すために heartbeatTimer 変数を定義します。WebSocket 接続が開かれると、startHeartbeat 関数を呼び出してハートビート タイマーを開始し、タイマー内でハートビート パケットを送信します。WebSocket 接続が閉じられるか、エラーが発生すると、stopHeartbeat 関数を呼び出してハートビート タイマーを停止します。
ハートビート パケットを送信するときは、WebSocket 接続のステータスが OPEN であるかどうかを確認する必要があることに注意してください。接続が閉じられている場合やエラーが発生した場合は、ハートビート パケットを送信しないでください。

おすすめ

転載: blog.csdn.net/u013194063/article/details/130313821