refactor: 重构 WebSocket 模块实现解耦

This commit is contained in:
Baobhan Sith
2025-05-09 17:26:55 +08:00
parent fdf5c18dfb
commit 21e71857e1
11 changed files with 1357 additions and 1287 deletions
@@ -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;
}