refactor: 重构 WebSocket 模块实现解耦
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import WebSocket, { WebSocketServer } from 'ws';
|
||||
import { AuthenticatedWebSocket } from './types';
|
||||
import { cleanupClientConnection } from './utils';
|
||||
|
||||
const HEARTBEAT_INTERVAL_MS = 5000; // 保持原始的心跳间隔
|
||||
|
||||
export function initializeHeartbeat(wss: WebSocketServer): NodeJS.Timeout {
|
||||
const heartbeatInterval = setInterval(() => {
|
||||
wss.clients.forEach((ws: WebSocket) => {
|
||||
const extWs = ws as AuthenticatedWebSocket;
|
||||
if (extWs.isAlive === false) {
|
||||
console.log(`WebSocket 心跳检测:用户 ${extWs.username} (会话: ${extWs.sessionId}) 连接无响应,正在终止...`);
|
||||
cleanupClientConnection(extWs.sessionId); // 使用会话 ID 清理
|
||||
return extWs.terminate();
|
||||
}
|
||||
extWs.isAlive = false;
|
||||
extWs.ping(() => {});
|
||||
});
|
||||
}, HEARTBEAT_INTERVAL_MS);
|
||||
|
||||
// 当 WebSocket 服务器关闭时,清除心跳定时器
|
||||
wss.on('close', () => {
|
||||
console.log('WebSocket 服务器正在关闭,清理心跳定时器...');
|
||||
clearInterval(heartbeatInterval);
|
||||
});
|
||||
|
||||
console.log(`心跳检测已初始化,间隔: ${HEARTBEAT_INTERVAL_MS}ms`);
|
||||
return heartbeatInterval;
|
||||
}
|
||||
Reference in New Issue
Block a user