进入 socket.io 个房间并从所有活动中访问此房间

get into socket.io room and access to this room from all events

我有一个让我进入房间的功能,但是当我尝试从其他事件向该房间中的用户发送呼叫时,我需要再次加入每个事件呼叫。然后我想继续参加所有的活动发射器。

例子

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

socket.on('do_something',function(room){
    socket.join(room);
    io.to(room).emit('something');
});

然后我想打电话给 socket.on('join_room',function(room) 并且在我需要的时候总是呆在房间里打电话 socket.on('do_something',function(room) 作为

socket.on('do_something',function(room){
    io.to(room).emit('something');
});

对于简单的事件,这不是必需的,但是当有很多事件时它很有用

webSocket(或 webSocket 之上的 socket.io 套接字)仅在一页的持续时间内存在。当用户导航到一个新页面时,现有的 webSocket 将关闭,然后您的新页面可以根据需要自由创建一个新页面,但之前的 webSocket 不再可用。如果您在服务器中记录连接和断开连接事件,每次用户导航到新页面时,您都会看到先断开连接,然后再连接。

因此,当您在一个页面上 .join() 一个 webSocket 时,这与在另一个页面上创建的另一个 webSocket 无关。下一页的 webSocket 将再次从头开始创建,您的服务器将必须 .join() 将其放入您希望它所在的任何房间。

then didnt work if i make a join in one page and go to other? even if I maintain the socket.userid

当用户进入一个新页面时,前一个页面的套接字将被关闭(因此失去它可能加入的任何房间)并且您的客户端代码将必须创建一个新套接字,因此您的服务器将再次必须将新插座插入所需的房间。

您的客户端页面初始化代码应该创建所需的套接字,然后将任何适当的初始化消息发送到服务器。服务器应该看到新的套接字连接,然后可以在该套接字上进行任何适当的设置。