我有一个功能让我进入一个房间,但当我尝试从其他事件向这个房间的用户发送呼叫时,我需要再次加入每个事件呼叫。那么我想继续加入所有事件发射器。
例如
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');
});
对于简单事件,这不是必需的,但是当它们中的许多有用时
答案 0 :(得分:1)
webSocket(或webSocket顶部的socket.io套接字)仅在一页的持续时间内存在。当用户导航到新页面时,现有的webSocket将关闭,然后您的新页面可以根据需要自由创建新页面,但之前的webSocket不再可用。如果您在服务器中记录连接和断开连接事件,则每次用户导航到新页面时都会看到断开连接,然后连接。
因此,当你在一个页面上.join()
一个webSocket时,这与在另一个页面上创建的另一个webSocket无关。下一页上的webSocket将再次从头开始创建,您的服务器必须.join()
进入您希望它进入的任何房间。
如果我在一个页面中加入并转到其他页面,那么然后没有用?即使 我维护socket.userid
当用户转到新页面时,前一页的套接字将被关闭(从而丢失可能加入的任何房间),并且您的客户端代码必须创建一个新的套接字,因此您的服务器将再次拥有将新插座放入所需的房间。
您的客户端页面初始化代码应创建所需的套接字,然后将任何适当的初始化消息发送到服务器。服务器应该看到新的套接字连接,然后可以在该套接字上进行任何适当的设置。