根据文档将消息发送到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
});
};
Run Code Online (Sandbox Code Playgroud)
它在以下日志中显示清楚(基于前面的代码)我指定的房间是一个有效的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}
Run Code Online (Sandbox Code Playgroud)
这个模块是否有问题导致它无法按预期工作?或者我使用了正确的语法?
我在全球发送这些消息(非基于房间),客户端正在完美地接收消息,所以我认为我的客户端套接字事件监听器没有问题.它似乎不是我加入房间的模块,因为日志显示两个客户端是房间的成员,因为它们应该在Socket.io的房间数据结构中.
我在GitHub上更详细地添加了这个问题:https://github.com/socketio/socket.io/issues/2518
根据你所说的,包括所有的重命名(这使得猜测变得有点困难),你似乎有 2 个连接:57VUYD1其中一个似乎是服务器,D4N178C我猜测是客户端。所以尝试连接M57VUYD1不会有太大作用。
尝试发送到客户的地址:
socket.to('D4N178C').emit('receive message', {
name : data.name,
message : data.message,
sender : client.id
});
Run Code Online (Sandbox Code Playgroud)
它可能57VUYD1代替D4N178C,因为我不确定你是如何定义事物的。
我也不确定您分配了哪个变量可以让您获得D4N178C,但您可以将其替换为上面的任何有效内容.to()并且应该有效。
| 归档时间: |
|
| 查看次数: |
886 次 |
| 最近记录: |