Socket.io 房间没有收到消息

Posted

技术标签:

【中文标题】Socket.io 房间没有收到消息【英文标题】:Socket.io rooms is not getting message 【发布时间】:2020-10-31 16:39:11 【问题描述】:

我在 nodejs-express 应用程序中有两个文件

first.pug

var socket = io.connect('//'+document.location.hostname+':'+document.location.port, 
  query: 
    token: "XXXXXX"
    
);    

socket.on('connect', (s) => 
    console.log('connected!');
      socket.emit('join123', 'room1');
);

second.pug

var socket = io.connect('//'+document.location.hostname+':'+document.location.port, 
  query: 
    token: "XXXXXX"
    
);    
socket.on('join123', function (data) 
  console.log("join.group========================"+data);
);    

Nodejs 服务器端

io.on('connection', (socket) => 
  console.log('a user connected');
  socket.join('join123');
);

当从first.pug 发送消息时,我在second.pug 中看不到任何消息

【问题讨论】:

【参考方案1】:

second.pug 建立的 socket.io 连接永远不会收到消息,因为您的服务器永远不会向它发送消息。

first.pug 的作用如下:

    它会创建一个到您的服务器的 socket.io 连接。 当该连接成功时,它会向该服务器发送join123 消息。

这是您的 socket.io 服务器所做的:

    它监听连接的客户端。 当客户端连接时,它会将客户端放入join123 房间。 没有消息发送到任何连接的客户端。

注意:对于客户端发送的join123 消息,服务器上没有侦听器,很可能那里有问题。

second.pug 的作用如下:

    它会创建一个到您的服务器的 socket.io 连接。 它侦听要发送给它的join123 消息。

但是,没有任何东西会向 second.pug 发送 join123 消息,因此 second.pug 永远不会收到该消息。 first.pug 向您的服务器发送 join123 消息,但服务器从不将其发送给其他任何人。执行socket.join('join123') 的行为不会导致发送任何消息。它只是将套接字添加到该名称的房间。如果您希望 second.pug 获得 join123 消息,则必须在服务器上编写代码,将该消息实际发送到所有连接或以某种方式仅发送到 second.pug 连接。

【讨论】:

@ManishKumar - 我不知道你的代码应该做什么,所以不知道有什么建议。 两个将first.pug 的消息传递给second.pug 我将在服务器端执行的操作。 ?假设我只有这么多与发送接收消息相关的代码 @ManishKumar - 在您的服务器上,您需要监听 first.pug 发送给它的消息,然后当您收到该消息时,将消息发送到 second.pug 的套接字(如果second.pug 与 first.pug 同时打开)。 `socket.join('join123', () => io.to('join123').emit('join123','一个新用户加入了房间'); ) ; socket.on('join123', (id, msg) => socket.to(id).emit('join123', "msg1"); ); ` 在服务器端工作

以上是关于Socket.io 房间没有收到消息的主要内容,如果未能解决你的问题,请参考以下文章

无法向socket.io中的房间发送消息

向 Socket.io 中的其他房间发送消息

Socket.io 不会在断开连接时向房间发送消息

使用Socket.io将消息发送到多个房间?

使用 socket.io 防止向多个房间发送消息

NestJS + Socket.io:没有收到消息