真的用[socket.join(the_other_room);]客户端加入到其他房间?

时间:2017-10-10 22:46:43

标签: node.js socket.io

此外,我正在创建rom" / other_room"用:

io.of('/other_room');

然后我做了:

socket.on('MessageFromClient_Change_Of_ROOM', function(msj){

// yes!, I validate var msj == '/other_room'


console.log('before: ' + socket.nsp['name']);
socket.join(msj);
console.log('after: ' + socket.nsp['name']);
}

但永远我的控制台打印:

before: /
after: /

为什么这个插座永远不会改为" / other_room" ???

由于

版/ ADDITION:

这是我的代码:

    var io = require('socket.io').listen(6969);
    io.sockets.on('connection', function(socket){
        clientes ++;
        server.sockets.emit('eventCONEX', clientes);
        // here my lines of code with "events" ...
        // then ALL "new connection" by default go into '/'...
        // then all "new connection" have assigned the namespace "/"
     });

请:我如何从"这个默认值传输/移动用户[/]"到"个性化" ??

我有一大堆客户:A,B,C,E,...,Z

然后我用的时候:

        io.sockets.emit('My Event', the_info);

远程客户端中的窗口浏览器,显示" the_info"连接到" /"的所有客户或默认情况下为socket / room / namespace。

我需要用户可以创建" Room_created_by_A"或" Room_created_by_B" ...

我相信指示:

socket.join(new_name);

方法是正确的,但现在我明白不是正确的。

然后,当客户端发送消息" create_new_room"时,我会运行这些行:

function list_of_rooms(){
    s = '';
    for(S in server.nsps)s += S + '\n';
    return s;
}

server.of(msj);
server.of(socket.nsp['name']).emit('F5_rooms', list_of_rooms());

我尝试新解释:

当客户A创建"房间" [thecnology]然后我的代码/程序运行更新" list_of_rooms()"然后一些客户作为F,G,H可以转到房间[thecnology]。

然后因为组{A,F,G,H}进入房间[thecnology],如果他们仅发送消息,则组{A,F,G,H}收到消息,因为消息或&#34 ;多播"只对客户进入[thecnology]。

我相信这个消息/多播是可能的:

server.of(socket.nsp['name']).emit('new_message_to_this_group', message);

新的,感谢帮助; (我相信也许没有被授权说谢谢)

1 个答案:

答案 0 :(得分:0)

您将名称空间与房间完全混淆了。它们是两个完全不同的东西,使用房间,你不需要对名称空间做任何事情。要将客户端套接字放入房间,可以使用该特定客户端套接字在服务器上执行此操作:

socket.join("someRoom");

然后,要从服务器向该房间中的每个人发送消息,请执行以下操作:

io.in("someRoom").emit("msg", "Hello to all");

如果您想使用MessageFromClient_Change_Of_ROOM消息加入会议室,可以这样做:

io.on('connection', function(socket) {
    socket.on('MessageFromClient_Change_Of_ROOM', function(msj){
        // assumes client is only supposed to be in one room
        // and keeps track of prior room in socket.priorRoom
        if (socket.priorRoom) {
           // leave previous room
           socket.leave(socket.priorRoom);
        }
        // join new room
        socket.join(msj);
        socket.priorRoom = msj;
    });
});