【问题标题】:socket.io: how to make server run functions when disconnection from a roomsocket.io:如何在与房间断开连接时使服务器运行功能
【发布时间】:2016-02-21 23:09:42
【问题描述】:

尝试学习套接字 io,我正在玩一个测试应用程序,其中:

  • 套接字根据页面 url 加入不同的房间(/page1 连接加入房间 page1 等)
  • 我有一个单独的“仪表板”页面,我想显示每个页面有多少连接

我有两个问题(文档让我很困惑):

  • 当用户断开连接时,我不知道如何确定他们在哪个房间,因此根据房间执行不同的功能。

这是我的尝试:

服务器代码

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

    socket.on('joinRoom', function(room){
        console.log('New connection to room: ' + room);
        socket.join(room);  // Clients join different rooms depending on the page.
        console.log(socket.rooms);  // socket.rooms here has a value
        // code to increment room counter will go here.
    });

    socket.on('disconnect', function(){

        console.log(socket.rooms); // In this line, socket.rooms is EMPTY
        if (socket.rooms == room1){
            // decrement room 1 counter
        }

    });
});

客户端代码

var socket = io();

socket.on('connect', function(){
    socket.emit('joinRoom', 'client');
});
  • 我的下一个问题,我似乎无法获得正确的语法,让客户端向房间/服务器发出正确的语法,以对来自特定房间的消息做出反应。如果有人能给我一个可以效仿的例子,那将非常有帮助。

感谢阅读。

【问题讨论】:

  • 您好,您使用的是哪个版本的 socket.io?语法实际上取决于他们,因为他们一直在通过版本更改来更新他们的房间 API。如果不确定,请在服务器文件夹中运行 npm list 并查看 socket.io@ 后面的数字

标签: node.js sockets socket.io


【解决方案1】:

加入后,您需要为套接字“注册”房间,如下所示:

currentRoom[socket.id] = room.newRoom;

当他们离开时打电话:

socket.leave(currentRoom[socket.id]);

应该这样做。

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2011-12-02
    • 2014-09-28
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多