ネットワーク アプリケーション開発において、WebSocket はクライアントとサーバー間の永続的な双方向通信接続の確立を可能にする重要な通信プロトコルです。ただし、接続の安定性を維持するために、WebSocket でのハートビートは不可欠な概念です。この記事では、WebSocketにおけるハートビートとは何か、その役割について詳しく紹介します。
WebSocket ハートビートとは何ですか?
WebSocket ハートビートは、接続をアクティブに保つために、小さなデータ パケットを定期的にサーバーに送信するプロセスです。これらの小さなパケットは、ハートビート パケットと呼ばれることがよくあります。WebSocket ハートビートの基本的な考え方は、クライアントとサーバーの間で定期的にデータを送信し、長時間通信がないために接続が切断されることを防ぐことです。
心拍の役割
WebSocket ハートビートの役割は非常に重要です。
- 接続を維持する: 場合によっては、ネットワーク デバイスまたはファイアウォールが非アクティブな接続を閉じることがあります。ハートビート パケットを定期的に送信することにより、WebSocket 接続はアクティブな状態を維持し、閉じられることを回避できます。
- 接続ステータスの検出: ハートビート パケットの送受信を使用して、接続ステータスを検出できます。サーバーがハートビート パケットへの応答を停止した場合、クライアントは接続を切断済みとしてマークし、再接続やエラー メッセージの表示などの適切なアクションを実行できます。
WebSocketハートビートの実装
WebSocket 接続でハートビートを実装する方法を示す簡単な JavaScript コード例を次に示します。
// 创建 WebSocket 连接
const socket = new WebSocket('wss://example.com');
// 定义心跳包数据
const heartbeatData = 'heartbeat';
// 定时发送心跳包
const heartbeatInterval = setInterval(() => {
if (socket.readyState === WebSocket.OPEN) {
socket.send(heartbeatData);
}
}, 5000); // 每隔 5 秒发送一次心跳包
// 监听消息
socket.addEventListener('message', (event) => {
const message = event.data;
// 判断收到的消息是否是心跳包
if (message === heartbeatData) {
// 收到心跳包,更新连接状态
console.log('Received heartbeat from server.');
} else {
// 处理其他消息
console.log('Received message from server:', message);
}
});
// 监听连接关闭事件
socket.addEventListener('close', (event) => {
clearInterval(heartbeatInterval);
console.log('WebSocket connection closed with code:', event.code);
});
この例では、WebSocket 接続を作成し、ハートビート パケットを定期的に送信します。サーバーからハートビート パケットを受信すると、接続ステータスを更新します。接続が閉じられた場合、ハートビート タイマーもクリアされます。
結論は
WebSocket のハートビートは、接続を維持するための重要なメカニズムです。小さなパケットを定期的に送信することで、非アクティブによる接続の切断を防ぎ、接続のステータスも検出します。