客户如何通过离开所有旧房间而通过socketio连接到新房间

时间:2018-07-27 06:54:01

标签: javascript node.js websocket socket.io

我在服务器上有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

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

我不想在加入新房间时监听旧房间的数据

1 个答案:

答案 0 :(得分:1)

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

在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 cheatsheet和有关rooms and namespaces的文档。

希望对您有帮助!