【问题标题】:How to listen for Room events如何监听房间事件
【发布时间】:2015-07-19 04:45:46
【问题描述】:

所以澄清一下,我知道客户端应该向服务器发送诸如“加入房间”之类的消息进行处理,这很好,我知道我可以为“离开房间”做同样的事情。

我想要的是自己实际监听事件,因为如果客户端断开连接,我需要向受影响的房间发送消息,因为当客户端断开连接时,他们会自动离开所有房间。

所以我想要类似的东西;

socket.on('join' function() {
// send message
});

socket.on('leave' function() {
// send message
});

这样如果用户关闭窗口(断开客户端,然后触发所有房间离开)我可以发送消息。

我正在使用最新的 socket.io,带有 redis 适配器。

还有;

列出特定套接字所在的所有房间的最有效方法是什么,因为从技术上讲,我认为断开连接事件应该包含 client_id,因此我可以手动执行此操作。

关键是清晰度和稳定性,尽管我对其他方法持开放态度(仍然必须使用 socket.io)。

谢谢

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    所以,如果我正确理解了您的主要问题:您想在实现本身中听取加入和离开房间的事件,这样 socket.join(room_id) 应该触发您想要收听的事件。

    问题是文档没有提到任何收听该事件的方式。事实上,the implementation itself 在加入房间时没有显示触发事件的迹象。我的猜测是你必须实现join_room/leave_room 系统来处理它。

    关于子问题,socket 对象包含一个名为rooms 的数组,因此socket.rooms 包含该socket 当前所在的所有房间。

    这可能就是你要找的:

    socket.on('disconnect', function() { for(var room in socket.rooms) { //do stuff before the client close the connection and leave the rooms } });

    【讨论】:

    • 非常感谢您对子问题的回答。我想我需要进一步调查事件系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2012-06-21
    相关资源
    最近更新 更多