实现思路
- 使用
net
模块:Node.js的net
模块提供了创建TCP服务器和客户端的能力。
- 事件监听:通过监听服务器的
connection
事件来处理新的连接。每个连接都作为一个独立的Socket
对象,通过监听Socket
的data
事件来接收客户端发送的数据,监听end
事件来处理连接关闭。
- 连接管理:使用一个数据结构(如数组)来存储所有连接的
Socket
对象,以便广播消息给所有在线用户。
- 消息广播:当收到某个客户端的消息时,遍历存储
Socket
对象的数组,将消息发送给除发送者外的其他所有客户端。
关键代码片段
const net = require('net');
// 创建TCP服务器
const server = net.createServer((socket) => {
// 新连接处理
console.log('新用户连接');
// 存储所有连接的数组
global.sockets = global.sockets || [];
global.sockets.push(socket);
// 接收客户端数据
socket.on('data', (data) => {
// 广播消息给其他所有客户端
global.sockets.forEach((s) => {
if (s!== socket) {
s.write(data);
}
});
});
// 处理连接关闭
socket.on('end', () => {
console.log('用户断开连接');
global.sockets = global.sockets.filter((s) => s!== socket);
});
});
// 监听端口
server.listen(8080, () => {
console.log('服务器已启动,监听8080端口');
});