【问题标题】:node js net library - get info about the client(socket)节点 js 网络库 - 获取有关客户端(套接字)的信息
【发布时间】:2017-09-05 23:55:41
【问题描述】:

我使用带有 socket.io 的 nodejs 集群,在主线程中我使用内置的网络库来监听端口并将连接(套接字)手动传递给工作人员(基于客户端的 IP 地址,所以如果客户端重新连接到服务器,客户端将加入同一个工作人员)。这运行良好,但我想测试,我想从 localhost 加入不同的工作人员。

是否有任何方法可以获取有关客户端的信息(例如浏览器名称、自定义参数)或其他任何东西来使来自 localhost 的两个或多个客户端之间有所不同? - 如果我能够在开发环境中将客户端加入到基于浏览器的工作人员(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);
}

【问题讨论】:

  • 这有点困难,因为连接必须在任何额外的协议信息可用之前发生。您打算在什么操作系统上运行?
  • 源 IP、源 TCP 端口和目标 IP 是您拥有的 3 样东西
  • 开发环境是 windows 10。源 ip、tcp 端口和指定 ip 在任何来自 localhost 的连接上都是相同的。
  • 源/目标 ip 可以更改为 127.0.0.0/8 范围内的任何内容,它们都指向环回接口。您已经可以ping 127.0.0.2。只要您不监听特定的 127 地址,您就可以连接到不同的地址,并且应该能够在 connection 中选择该地址

标签: javascript node.js multithreading typescript socket.io


【解决方案1】:

在 Windows 和 Linux 上,整个 127.0.0.0/8 范围默认在回送接口上工作,因此只要您的服务器没有监听某个特定地址,您就可以按目的地或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()
}

【讨论】:

  • 请注意,如果有人尝试使用 webpack 2,您必须将主机设置为 0.0.0.0,因为默认值为 127.0.0.1。所以你可以添加这个:--host 0.0.0.0
  • 我猜如果您一直在听 127.0.0.1,您可以区分源地址,但在客户端中指定源地址的支持较少。我不确定chrome或firefox等浏览器是否支持。
猜你喜欢
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 2021-09-23
  • 2012-01-20
  • 2015-03-16
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多