let websocket: WebSocket; const msgHandlersMap = {}; let lastUrl; export const openWebSocket = (url) => { if (websocket && websocket.readyState === WebSocket.OPEN) { if (lastUrl == url) { return; } websocket.close(); } websocket = new WebSocket(url); lastUrl = url; websocket.onopen = () => { console.log('websocket已连接'); }; websocket.onmessage = (msg) => { const event = JSON.parse(msg.data); const handlers = msgHandlersMap[event.type]; if (!handlers) { return; } Object.values(handlers).forEach((handler: any) => { handler(event.data); }); }; websocket.onclose = () => { console.log('websocket已断开'); setTimeout(() => { openWebSocket(url); }, 2000); }; }; export const registerHandler = (type, key, handler) => { const handlers = msgHandlersMap[type] || {}; handlers[key] = handler; msgHandlersMap[type] = handlers; };