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

如何判断Node.js中net模块Socket是客户端还是服务端创建的?

区分Node.js net模块Socket实例是客户端还是服务端的方法
  • 检查server属性
    服务端通过net.Server的connection事件接收的客户端连接Socket,会自带server属性,指向生成它的net.Server实例;而作为客户端主动发起连接创建的Socket(比如用net.connect()或new net.Socket()后建立连接的),这个属性为undefined。

    代码示例:

    // 服务端代码片段
    const net = require('net');
    const server = net.createServer((socket) => {
      // 这里的socket是客户端连接过来的实例
      console.log(socket.server === server); // 输出 true
    });
    server.listen(3000);
    
    // 客户端代码片段
    const clientSocket = net.connect({ port: 3000 }, () => {
      // 这里的clientSocket是主动创建的客户端实例
      console.log(clientSocket.server); // 输出 undefined
    });
    
  • 不要依赖内部属性
    虽然部分内部属性(比如_isServerSocket)也能区分客户端/服务端Socket,但这类以下划线开头的属性属于Node.js内部实现细节,版本迭代中可能被修改或移除,生产环境里优先用公开的server属性。

内容的提问来源于stack exchange,提问作者Jonathan Wilbur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:41:11