node.js加入和离开聊天室

时间:2014-03-20 04:08:49

标签: node.js socket.io chat

我对node.js比较陌生,现在已经有很长一段时间了。我在处理多个聊天室时遇到了问题。

当用户连接时,他们会自动加入我设置的房间。但是,问题是连接是持久的,我希望通过使用socket.leave(room)方法来解决这个问题。

我的问题是,如何在客户端处理这个问题?

我是否正确地将其放在我的剧本上?

server.js

io.sockets.on( 'connection', function( socket ) {

    socket.on('join', function(room) {
          socket.join(room);
          console.log("User joined "+room);
    });

    socket.on('disconnect', function(room) {
          socket.leave(room);
          console.log("User left "+room);
    });

在客户端上,如何触发断开连接事件?我应该在页面卸载时调用吗?

编辑:其他信息

User 1 connects to room 1
User 2 connects to room 1

这是一个很好的房间连接。

然而,一旦有房间转换

User 1 connects to room 2
User 3 connects to room 2

用户1无法接收来自用户3的消息,因为他仍在听房间1

这就是我希望管理用户希望加入的房间的原因,因此我提出了如何强迫用户离开特定房间的问题。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:4)

如果您在用户更改此房间时从客户端代码中发出类似change room的事件:

socket.emit("change room", {newroom: "room name"});

假设客户已经加入了一个房间:

socket.on('join', function(room){
  socket.room = room;
  socket.join(room);
});

然后您可以在服务器中执行此操作以更改该客户端的空间:

socket.on("change room",function(data){
  socket.leave(socket.room);
  socket.join(data.newroom);
});

您无需在socket.leave()事件中致电disconnect。你可以用自己的逻辑来做。希望你能理解这一点!