心跳机制是每隔一段时间会向服务器发送一个数据包,告诉服务器自己还活着,同时客户端会确认服务器端是否还活着,如果还活着的话,就会回传一个数据包给客户端来确定服务器端也还活着,否则的话,有可能是网络断开连接了。需要重连。
let reconnectInterval = 3000;// 设置重连间隔时间
let maxRetries = 5;// 最大重试次数
let retries = 0; // 当前重试次数
const heartbeatInterval = 30 * 1000;// 心跳间隔(比如30秒)
const heartbeatTimeout = 60 * 1000;// 心跳超时(比如60秒)
let heartbeatIntervalId, heartbeatTimeoutId;
function startWebSocket(){
// 创建WebSocket连接
const ws = new WebSocket('ws://your-websocket-server');
// 连接打开时的回调
ws.onopen = function(event) {
console.log('WebSocket connected');
// 开始心跳
startHeartbeat();
};
// 连接关闭时的回调
ws.onclose = function(event) {
console.log('WebSocket disconnected');
// 清除心跳定时器
clearHeartbeat();
//重连
reconnect();
};
// 接收到服务器消息时的回调
ws.onmessage = function(event) {
// 如果收到服务器消息,重置心跳超时
clearTimeout(heartbeatTimeoutId);
heartbeatTimeoutId = setTimeout(function() {
ws.close();
}, heartbeatTimeout);
};
// 出现错误时的回调
ws.onerror = function(error) {
console.error('WebSocket error observed:', error);
};
}
开始心跳
function startHeartbeat() {
// 定时发送心跳消息
heartbeatIntervalId = setInterval(function() {
ws.send('Heartbeat'); // 你可以发送任何特殊的心跳消息
}, heartbeatInterval);
// 设置超时并关闭连接,如果在heartbeatTimeout时间内没有收到消息
heartbeatTimeoutId = setTimeout(function() {
ws.close();
}, heartbeatTimeout);
}
清除心跳定时器
function clearHeartbeat() {
clearInterval(heartbeatIntervalId);
clearTimeout(heartbeatTimeoutId);
}
重连函数
function reconnect(){
if (retries < maxRetries) {
retries++;
console.log(`Attempting reconnection ${retries}`);
setTimeout(startWebSocket, reconnectInterval);
} else {
console.error('Maximum reconnection attempts reached');
// 处理最大重连次数达到后的逻辑
}
}