【发布时间】:2014-03-21 04:29:21
【问题描述】:
这真的难倒我,我试图使用 node 和 socket.io 创建一个多房间聊天应用程序,但由于某种原因,网络套接字事件没有为用户创建的房间触发。我有以下代码:
if (clientData.messageRoom == "Lobby") {
socket.broadcast.to('').emit('sendMessageResponse', data);
}
else {
console.log("broadcast room: " + clientData.messageRoom);
socket.broadcast.to(clientData.messageRoom).emit('sendMessageResponse', data);
}
console.log('user ' + name + ' send this : ' + clientData.messageBody + " to room: " + clientData.messageRoom);
我在服务器上有以下日志
List of all rooms:
{ '': [ 'WrCg6zlmUOJgXlcX0oW5', 'Ym4FCRTqRoGw5nbo0oW6' ],
'/SF': [ 'Ym4FCRTqRoGw5nbo0oW6', 'WrCg6zlmUOJgXlcX0oW5' ] }
broadcast room: SF
debug - broadcasting packet
user Davis send this : test to room: SF
broadcast room: SF
debug - broadcasting packet
user Bob send this : se to room: SF
debug - broadcasting packet
debug - websocket writing 5:::{"name":"sendMessageResponse","args":[{"message":"dfd","username":"Bob","roomName":"Lobby"}]}
user Bob send this : dfd to room: Lobby
您可以看到,当 Bob 向 Lobby 发送消息“dfd”而不是向用户创建的房间发送消息时,会触发 Web 套接字事件。我正在使用
获取所有房间的列表console.log(io.sockets.manager.rooms);
很明显,两个连接的客户端的 ID 都在房间 Lobby 和 SF 中,所以应该为房间 SF 触发事件,但事实并非如此!任何帮助将不胜感激!
编辑:我使用的是 socket.io 版本 0.9.16
【问题讨论】:
-
根据日志你没有两个房间,你说的是
SF和Lobby。它只是收到消息的 messageRoom 属性。由于没有Lobby,Emit 不起作用。 -
请重新运行测试并发布结果。
-
{ '': [ 'WrCg6zlmUOJgXlcX0oW5', 'Ym4FCRTqRoGw5nbo0oW6' ], '/SF': [ 'Ym4FCRTqRoGw5nbo0oW6', 'WrCg6zlmUOJgXlcX0oW5' ] } 是所有房间的列表,所以是的,我有 2 个房间房间,一个没有名字''和'/SF'的房间,我的问题是你可以看到我向那个房间广播,但是“websocket writing 5 ...”日志消息没有触发
标签: node.js websocket socket.io