Rooms

优质
小牛编辑
130浏览
2023-12-01

在每个命名空间内,您还可以定义套接字可以加入和离开的任意通道。 这些频道称为房间。 客房用于进一步分离问题。 房间也共享相同的套接字连接,如命名空间。 使用房间时要记住的一件事是它们只能在服务器端连接。

加入房间

您可以在套接字上调用join方法以将套接字订阅到给定的通道/房间。 例如,让我们创建一个名为'room-《room-number》'并加入一些客户。 一旦这个房间满了,创建另一个房间并加入那里的客户。

Note - 我们目前在默认命名空间中执行此操作,即“/”。 您也可以以相同的方式在自定义命名空间中实现此功能。

要加入房间,您需要提供房间名称作为加入函数调用的参数。

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res) {
   res.sendfile('index.html');
});
var roomno = 1;
io.on('connection', function(socket) {
   //Increase roomno 2 clients are present in a room.
   if(io.nsps['/'].adapter.rooms["room-"+roomno] && io.nsps['/'].adapter.rooms["room-"+roomno].length > 1) roomno++;
   socket.join("room-"+roomno);
   //Send this event to everyone in the room.
   io.sockets.in("room-"+roomno).emit('connectToRoom', "You are in room no. "+roomno);
})
http.listen(3000, function() {
   console.log('listening on localhost:3000');
});

只需在客户端上处理此connectToRoom事件即可。

<!DOCTYPE html>
<html>
   <head>
      <title>Hello world</title>
   </head>
   <script src = "/socket.io/socket.io.js"></script>
   <script>
      var socket = io();
      socket.on('connectToRoom',function(data) {
         document.body.innerHTML = '';
         document.write(data);
      });
   </script>
   <body></body>
</html>

现在,如果您连接三个客户端,前两个将获得以下消息 -

You are in room no. 1

最后一个客户端将收到以下消息 -

You are in room no. 2

客房

离开一个房间

要离开房间,您需要像调用套接字上的join函数一样调用leave函数。

例如 - 要离开房间'room-1'

socket.leave("room-"+roomno);