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 であるかどうかを確認する必要があることに注意してください。接続が閉じられている場合やエラーが発生した場合は、ハートビート パケットを送信しないでください。