io.on(' connection')事件是否需要将数据发送到预先存在的&连接插座?

时间:2018-03-06 04:20:14

标签: node.js socket.io

我运行了2个Nodejs Server脚本:StudentServer& AdminServer都位于同一IP上的不同端口上。

我在StudentServer中检索到的数据库中保存了已连接的套接字ID(假设它是 SCKT-X0 )。从StudentServer通过 SCKT-X0 进行通信没有问题。

StudentServer已注册到事件:io.on('connection'),因为它实时为客户端提供服务,并且完全正常工作。 AdminServer没有io.on('connection')事件。

我正在尝试使用以下代码从 AdminServer 通过 SCKT-X0 推送数据:

if (io.sockets.connected[client.id]){
    io.to(client.id).emit("event", {"data": data});
}else{
    console.log("Client not connected");
}

结论: client.id是 SCKT-X0 ,因为它正在从 StudentServer 接收数据而没有任何更改套接字ID 。但是,当上述代码运行时,它会从 AdminServer 输出Client not connected

所以我的问题是:

  1. 我是否需要注册io.on(' connection')事件与a进行通信 预先存在和已连接的套接字ID(在另一台服务器中检索)?
  2. 如果对问题1 的回答是肯定的,那么socketIO是否会为不同的服务器引用具有相同SocketID的不同客户端?

1 个答案:

答案 0 :(得分:0)

这是socket.io特定的问题,这可能会改变,但io.on('connection')是一种机制,表明某些客户端已连接。要回答1号,是管理服务器需要它将数据推送到其所有客户端。把它想象成观察者模式。如果SCKT-X0未注册为连接到AdminServer,则即使您拥有该ID,也不会将其推送到客户端。

您需要像Redis Server这样的东西在不同的服务器上共享它。幸运的是,socket.io已经有了一个适配器

https://github.com/socketio/socket.io-redis