如何获取Node.js net.Server的所有已连接Socket实例?
获取Node.js net.Server的所有连接实例
核心结论
是的,目前在Node.js中,要获取每个net.Server的连接实例,必须在'connection'事件回调中自行维护连接列表,官方并没有提供直接枚举所有连接的API。
实现示例
推荐使用Set来存储连接(相比数组,删除操作更高效,且自动去重):
const net = require('net'); const server = net.createServer(); const activeConnections = new Set(); server.on('connection', (socket) => { activeConnections.add(socket); // 连接断开时从集合中移除 socket.on('close', () => { activeConnections.delete(socket); }); // 处理连接错误,避免未捕获异常导致进程崩溃 socket.on('error', (err) => { console.error('连接错误:', err); activeConnections.delete(socket); }); }); // 遍历所有连接的示例:向所有客户端广播消息 function broadcastMessage(msg) { for (const socket of activeConnections) { socket.write(msg); } } server.listen(3000, () => { console.log('服务器运行在3000端口'); });
关于server.getConnections的使用场景
server.getConnections()的设计目的仅为获取当前活跃连接的数量,适用于不需要操作连接实例的场景:
- 监控服务的连接负载情况
- 实现简单的限流逻辑(比如连接数超过阈值时拒绝新连接)
- 统计服务的并发连接数指标
它不暴露具体连接实例,是为了避免外部代码随意操作连接可能引发的异常,同时也符合Node.js让开发者自主管理资源生命周期的设计思路。
内容的提问来源于stack exchange,提问作者Qiulang
相关产品推荐
相关产品推荐

