首页 > 解决方案 > 客户如何离开所有旧房间通过socketio连接到新房间

问题描述

我在服务器上有 5 个房间让我们说“A”、“B”、“C”、“D”、“E”

服务器端

io.on('connection', (socket) => {
    console.log('New user connected');
    socket.on('disconnect', () => {
        console.log('User was disconnected');
    });
});

//创建房间的函数

function connectSocket(data) {
    io.emit(data.device_id, data);
    console.log('room',data.device_id, 'created');
}

// 房间创建调用

connectSocket("A");

客户端

var socket = io(*url*);
socket.on('connect', function () {
    console.log('Connected to server');
});
socket.on(*roomname*, function (message) {
    console.log(message);
});

` 问题

我想把房间 A 换到 B

但在我切换之前我想关闭所有连接

当我加入新房间时,我不想收听旧房间的数据

标签: javascriptnode.jswebsocketsocket.io

解决方案


我认为您将活动与房间混为一谈。io.emit(data.device_id, data);不创建房间,它只是将数据发送给每个连接的客户端,第一个参数是事件的名称,第二个是数据。文档

在 Socket.IO 中使用房间的正确方法如下:

加入房间:

socket.join(roomId); // roomId is a string

离开房间:

socket.leave(roomId);

发送给除发件人之外的“游戏”房间中的所有客户:

socket.to('game').emit('nice game', "let's play a game");

发送给“游戏”房间中的所有客户,包括发件人:

io.in('game').emit('big-announcement', 'the game will start soon');

有关更多信息,请查看Socket.IO 备忘单和有关房间和命名空间的文档。

我希望它有帮助!


推荐阅读