Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在室内重新连接后,插座io未接收事件_Javascript_Node.js_Sockets_Socket.io - Fatal编程技术网

Javascript 在室内重新连接后,插座io未接收事件

Javascript 在室内重新连接后,插座io未接收事件,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,当socket io客户端重新连接到服务器时,我向服务器发送一个emit,以便重新连接到所有在断开套接字连接之前套接字所在的房间 但是当将事件发送到本应注册套接字的房间时,客户端将不会收到任何事件 当通过来自连接回调的套接字实例单独发送给他时,一切正常,他将收到事件 为什么会这样? 让他再次接收事件的唯一方法是完全强制重新启动客户端(刷新应用程序) 我正在服务器上使用这些: "socket.io": "^2.1.1", "socket.io-re

当socket io客户端重新连接到服务器时,我向服务器发送一个emit,以便重新连接到所有在断开套接字连接之前套接字所在的房间

但是当将事件发送到本应注册套接字的房间时,客户端将不会收到任何事件

当通过来自连接回调的套接字实例单独发送给他时,一切正常,他将收到事件

为什么会这样? 让他再次接收事件的唯一方法是完全强制重新启动客户端(刷新应用程序)

我正在服务器上使用这些:

"socket.io": "^2.1.1",
"socket.io-redis": "^5.2.0",
在客户机上:

"socket.io-client": "^2.2.0",
在服务器中,我使用Redis适配器,如下所示:

var server      = require('@app/server');
var io          = require('socket.io')(server);
var redis       = require('socket.io-redis');
io.adapter(redis({ 
  host: 'localhost', 
  port: 6379
}));
io.set('origins', '*:*');

module.exports = io;

可能问题是套接字实际上正在连接到旧的文件室或过时的节点进程或类似的东西?

当您重新连接到套接字时,客户端将具有与旧文件室不同的套接字id是的,但文件室具有相同的名称-当您向特定文件室发送事件时,我将发送到文件室名称,该用户已使用旧套接字id注册到该房间,并且在重新连接到套接字后,旧套接字id已更改,对吗?所以他不会收到eventOn我加入的第一个连接到房间,我们称之为“A”。当插座自动重新连接(断开连接后)时,我重新连接到所有房间,正如我们提到的“A”。然后,我从服务器发出
io.to('A').event…
,订阅者将不会收到他第一次连接时收到的消息。我需要明确告诉用户重新加载客户端-在那里,他将连接并成功加入文件室“A”。当您重新连接到套接字时,该客户端的套接字id将与旧的不同。是的,但文件室具有相同的名称-当您向特定文件室发送事件时,我将发送到文件室名称,该用户已使用旧套接字id注册到该房间,并且在重新连接到套接字后,旧套接字id已更改,对吗?所以他不会收到eventOn我加入的第一个连接到房间,我们称之为“A”。当插座自动重新连接(断开连接后)时,我重新连接到所有房间,正如我们提到的“A”。然后,我从服务器发出
io.to('A').event…
,订阅者将不会收到他第一次连接时收到的消息。我需要显式地告诉用户重新加载客户端-在那里,他将成功连接并加入房间“A”