io.on('connection')事件是否需要将数据发送到预先存在且已连接的套接字?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了io.on('connection')事件是否需要将数据发送到预先存在且已连接的套接字?相关的知识,希望对你有一定的参考价值。
我有2个Nodejs Server脚本运行,即:StudentServer和AdminServer,它们位于同一IP上的不同端口上。
我有一个连接的套接字ID(假设它是SCKT-X0)保存在StudentServer中检索的数据库中。从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接收数据而没有任何Socket ID的变化。但是当上面的代码运行时,它会从AdminServer输出Client not connected
。
所以我的问题是:
- 我是否需要注册io.on('connection')事件以与预先存在且已连接的套接字ID(在另一台服务器中检索)进行通信?
- 如果问题1的答案是肯定的,那么socketIO是否为不同的服务器引用具有相同SocketID的不同客户端?
这是socket.io特定的问题,这可能会改变,但io.on('connection')是一种机制,表明某些客户端已连接。要回答1号,是管理服务器需要它将数据推送到其所有客户端。把它想象成观察者模式。如果SCKT-X0未注册为连接到AdminServer,则即使您拥有该ID,也不会将其推送到客户端。
您需要像Redis Server这样的东西在不同的服务器上共享它。幸运的是,socket.io已经有了一个适配器
https://github.com/socketio/socket.io-redis
以上是关于io.on('connection')事件是否需要将数据发送到预先存在且已连接的套接字?的主要内容,如果未能解决你的问题,请参考以下文章
socket.io |我应该将路由处理程序包装在 io.on('connection') 中吗?
解决 ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')) 问题(