[英]Why are my messages not sending to the Socket.io room with this handler?
根据文档将消息发送到Socket.io中特定房间的方式似乎很简单。 在下面的代码中是一个处理程序,它是更大模块的一部分,但是功能应该都非常简单,特别是因为我正在显示暴露每个变量代表什么的日志:
module.exports.handle = function(client, data, socket, sessions, callback) {
debug.log('Client, ' + data.name + ' sent message:' + data.message);
debug.log(JSON.stringify(data, null, 3));
var sessionId = data.code;
var name = data.name;
var room = JSON.stringify(socket.sockets.adapter.rooms[sessionId]);
debug.log('Socket.io Room: ' + room);
socket.to(sessionId).emit('receive message', {
name : data.name,
message : data.message,
sender : client.id
});
};
在以下日志中(基于前面的代码),它似乎清楚地表明了我指定的房间是有效的Socket.io房间,因此我不明白为什么(在这种情况下) .to('M57VUYD1')
无法发送消息到房间。 在这种情况下,日志似乎可以确认M57VUYD1
是有效房间。
[Debug][Send Message Event Handler]: Client, Jonathan sent message:hey
[Debug][Send Message Event Handler]: {
"message": "hey",
"name": "Jonathan",
"code": "M57VUYD1"
}
[Debug][Send Message Event Handler]: Socket.io Room: {"sockets":{"57VUYD1":true,"D4N178C":true},"length":2}
该模块无法正常工作是否有问题? 还是我使用了正确的语法?
我正在全局发送这些消息(非基于房间),并且客户端正在完美地接收消息 ,因此我认为客户端套接字事件侦听器没有问题。 它似乎不是我加入会议室的模块,因为日志显示两个客户端是会议室的成员,因为它们应该在Socket.io的会议室数据结构中。
我在GitHub上更详细地添加了此问题: https : //github.com/socketio/socket.io/issues/2518
答案是这样的:正如我在Stack Overflow上了解到的那样,更改Socket.io中的套接字ID是您可以做的,但是我没有意识到的是, 这样做会以未知的方式破坏Socket.io 。 这些方法之一是:房间系统将不再起作用。
换句话说,不要将套接字ID更改为您自己选择的套接字,库不支持这样做。
根据您所说的内容,包括所有重命名(这使您更难猜测),您似乎有2个连接: 57VUYD1
(似乎是服务器)和D4N178C
(我猜是客户端)。 因此,尝试连接到M57VUYD1
不会做太多事情。
尝试发送到客户的地址:
socket.to('D4N178C').emit('receive message', {
name : data.name,
message : data.message,
sender : client.id
});
可能是57VUYD1
而不是D4N178C
,因为我不确定您如何定义事物。
我也不确定您分配的变量将使您获得D4N178C
,但您可以将其替换为上面D4N178C
.to()
可以正常工作的任何变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.