如何判断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
相关产品推荐
相关产品推荐

