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 房间没有收到消息的主要内容,如果未能解决你的问题,请参考以下文章