From 4c3b99edac4e73b6547fd4f9d1b041d29d01ff31 Mon Sep 17 00:00:00 2001 From: Seven <1530011482@qq.com> Date: Thu, 24 Sep 2026 10:31:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- websocket/connectionManager.js | 30 ++++++++++++++++++++++++------ websocket/index.js | 31 ++++++++++++++++++++++--------- 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/websocket/connectionManager.js b/websocket/connectionManager.js index a11eb37..360a53a 100644 --- a/websocket/connectionManager.js +++ b/websocket/connectionManager.js @@ -1,28 +1,46 @@ -const connections = new Map(); +const onlineUsers = new Map(); // 保存用户连接 function addConnection(username, ws) { - connections.set(username, ws); + onlineUsers.set(username, ws); console.log(`用户 ${username} 已连接`); - console.log("当前在线用户:", [...connections.keys()]); + console.log("当前在线用户:", [...onlineUsers.keys()]); } // 获取用户连接 function getConnection(username) { - return connections.get(username); + return onlineUsers.get(username); } // 删除用户连接 function removeConnection(username) { - connections.delete(username); + onlineUsers.delete(username); console.log(`用户 ${username} 已断开`); - console.log("当前在线用户:", [...connections.keys()]); + console.log("当前在线用户:", [...onlineUsers.keys()]); +} + +// 获取所有在线用户 +function getOnlineUsers() { + return Array.from(onlineUsers.keys()); +} + +// 广播所有在线用户 +function broadcast(data) { + const message = JSON.stringify(data); + + for (const ws of onlineUsers.values()) { + if (ws.readyState === WebSocket.OPEN) { + ws.send(message); + } + } } module.exports = { addConnection, getConnection, removeConnection, + getOnlineUsers, + broadcast }; \ No newline at end of file diff --git a/websocket/index.js b/websocket/index.js index caccacf..0a9e4ab 100644 --- a/websocket/index.js +++ b/websocket/index.js @@ -8,6 +8,8 @@ const { addConnection, getConnection, removeConnection, + getOnlineUsers, + broadcast } = require("./connectionManager"); // 创建WebSocket服务 @@ -44,21 +46,33 @@ function initWebSocket(server) { // 保存连接 addConnection(username, ws); + // 通知所有在线用户当前在线用户列表 + broadcast({ + type: "userOnline", + userList: getOnlineUsers() + }); + // 接收客户端消息 ws.on("message", (message) => { - try { - const data = JSON.parse(message.toString()); - console.log("收到WebSocket消息:", data); + try { + const data = JSON.parse(message.toString()); + console.log("收到WebSocket消息:", data); - handleMessage(username, data); - } catch (error) { - console.error("WebSocket消息处理失败:", error); - } - }); + handleMessage(username, data); + } catch (error) { + console.error("WebSocket消息处理失败:", error); + } + }); // 连接关闭 ws.on("close", () => { removeConnection(username); + + // 通知所有在线用户当前在线用户列表 + broadcast({ + type: "userOnline", + userList: getOnlineUsers() + }); }); // WebSocket错误 @@ -121,7 +135,6 @@ function handleSendMessage(senderName, data) { message: "消息保存失败" }) ); - } return; }