请封装一个websocket,包含心跳连接
时间: 2024-09-20 12:02:10 浏览: 28
WebSocket是一种在单个TCP连接上进行全双工通信的协议,常用于实时应用程序,如在线聊天、游戏等。下面是一个简单的JavaScript WebSocket封装示例,包含了心跳检测功能:
```javascript
class WebSocketClient {
constructor(url) {
this.url = url;
this.ws = new WebSocket(url);
this.heartbeatInterval = null;
this.isAlive = true; // 标记心跳状态
}
connect() {
this.ws.onopen = () => this.startHeartbeat();
this.ws.onerror = (error) => this.handleConnectionError(error);
this.ws.onclose = () => this.handleConnectionClose();
this.ws.onmessage = (event) => this.onMessage(event.data);
}
startHeartbeat() {
this.heartbeatInterval = setInterval(() => this.sendPing(), 60 * 1000); // 每分钟发送一次心跳
}
sendPing() {
if (this.isAlive) {
this.ws.send('ping'); // 发送心跳包
}
}
onMessage(data) {
// 数据接收处理
}
handleConnectionError(error) {
console.error('WebSocket connection error:', error);
this.isAlive = false;
}
handleConnectionClose() {
this.isAlive = false;
clearInterval(this.heartbeatInterval);
this.reconnect(); // 自动尝试重新连接
}
reconnect() {
// 实现自动重连逻辑,这里可以设置延迟后再尝试连接
setTimeout(() => this.connect(), 5000);
}
}
// 使用示例
const client = new WebSocketClient('ws://your-websocket-url');
client.connect();
```
在这个例子中,`WebSocketClient` 类创建了一个WebSocket实例,并设置了打开连接后的事件处理器以及心跳检查。如果接收到关闭或错误事件,会停止心跳并尝试重新连接。
阅读全文