我运行了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
。
所以我的问题是:
答案 0 :(得分:0)
这是socket.io特定的问题,这可能会改变,但io.on('connection')是一种机制,表明某些客户端已连接。要回答1号,是管理服务器需要它将数据推送到其所有客户端。把它想象成观察者模式。如果SCKT-X0未注册为连接到AdminServer,则即使您拥有该ID,也不会将其推送到客户端。
您需要像Redis Server这样的东西在不同的服务器上共享它。幸运的是,socket.io已经有了一个适配器