节点jsnetworking库 – 获取有关客户端(套接字)

我用socket.io使用nodejs集群,而在主线程中,我使用内置的networking库来侦听端口,并手动将连接(套接字)传递给worker(基于客户端的IP地址,所以如果客户端重新连接到服务器的客户端将join到同一个工人)。 这是行之有效的,但我想testing,我想从本地join不同的工作。

有没有什么办法获得有关客户端的信息(如浏览器名称,自定义参数)或其他任何东西,使本地主机上的两个或多个客户端不同? – 如果我能够在开发环境中将客户端join到基于浏览器的工作人员(Chrome客户端去工作人员1,Firefox客户端去工作人员2),这可能会很酷。

private createServer(): void { var self = this; this.masterServer = net.createServer(<any>{ pauseOnConnect: true }, (connection) => { console.log('server', connection); let worker = self.workers[self.getWorkerIndex(connection.remoteAddress, self.workerCount)]; worker.send('privateCon', connection); }).listen(self.serverPort); } 

在Windows和Linux上,默认情况下,整个127.0.0.0/8范围在loobback界面上工作,只要你的服务器没有监听一个特定的地址,就可以通过目的地址或localAddress区分连​​接。

运行一个简单的服务器

 $ node -e 'net.createServer(connection => { console.log(connection.remoteAddress, connection.remotePort, connection.localAddress) }).listen(8082)' 

然后连接像telnetnc甚至node

 $ node -e 'client = net.connect(8082, "127.0.0.4", ()=> client.end())' 

即使在指定IPv4的情况下,OSX也会得到一个映射到IPv6的连接,不确定是否也能在Windows上获得这个连接,但是服务器的输出应该是这样的:

 ::ffff:127.0.0.4 57290 ::ffff:127.0.0.4 

所以你可以使用你的连接处理程序的东西

 switch (connection.localAddress){ case '::ffff:127.0.0.1': return worker1 case '::ffff:127.0.0.2': return worker2 case '::ffff:127.0.0.3': return worker3 case '::ffff:127.0.0.4': return worker4 default: return lookupWorker() }