在 WebSocket 通信中,客户端和需要定期发送心跳消息来保持连接活跃。心跳机制可防止连接因网络中断或不活动而超时关闭。以下代码实现了 WebSocket 心跳的完整实现:

WebSocket 心跳实现WebSocket 心跳实现


WebSocket 心跳实现


客户端 JaScript 代码:

```jascript const ws = new WebSocket('ws://localhost:8080');

// 发送心跳消息 const heartbeatInterval = setInterval(() => { ws.send('{"type": "heartbeat"}'); }, 5000); // 每 5 秒发送一次

// 在接收到心跳响应时重置心跳间隔 ws.addEventListener('message', (nt) => { const data = JSON.parse(nt.data); if (data.type === 'heartbeat-response') { clearInterval(heartbeatInterval); heartbeatInterval = setInterval(() => { ws.send('{"type": "heartbeat"}'); }, 5000); } }); ```

端 Python 代码(使用 Flask-SocketIO):

```python from flask import Flask, request from flask_socketio import SocketIO

app = Flask(__name__) socketio = SocketIO(app)

@socketio.on('message') def handle_message(message): if message['type'] == 'heartbeat': socketio.emit('heartbeat-response', {'type': 'heartbeat-response'})

if __name__ == '__main__': socketio.run(app) ```

在此实现中,客户端每 5 秒发送一次心跳消息,并使用 JSON 格式来标识消息类型。端使用 Flask-SocketIO 处理来自客户端的心跳消息,并在收到时发送响应。

工作原理:

客户端定期发送心跳消息,并预设一个超时时间。 如果端在超时时间内接收到心跳消息,则会重置客户端的心跳间隔,并发送心跳响应消息。 如果端在超时时间内没有接收到心跳消息,则会关闭连接。