You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:52:05