javascript - 如何监听房间事件

标签 javascript node.js sockets socket.io

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

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

所以我想要类似的东西;

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

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

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

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

还有;

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

关键是清晰度和稳定性,尽管我愿意接受其他方法(仍然必须使用 socket.io)。

谢谢

最佳答案

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

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

对于子问题,套接字对象包含一个名为 rooms 的数组,这样 socket.rooms 包含套接字当前所在的所有房间。

这可能就是您正在寻找的:

socket.on('断开连接', function() { for(socket.rooms 中的 var room) { //在客户端关闭连接并离开房间之前做一些事情 } });

关于javascript - 如何监听房间事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30120929/

相关文章:

javascript - 错误: ETIMEDOUT on NPM usage in Meteor

javascript - 将鼠标悬停在元素上 onclick

javascript - Node.js:对象在响应对象中转换为未定义

node.js - 本地主机 3000 和 5000 之间的区别?

javascript - 使用 getElementById 获取 CSS 数据

javascript - 如何在 Google Apps 脚本上请求 Reddit 的访问 token

node.js - (NodeJS) Express 仅使用 Connect 提供了什么?

C - 神秘的线程段错误

python - 使用多处理和套接字时出现 SSL 错误

c# - 是否有可能 'relay' 一个套接字?