Socket.IO 房间

  • 房间

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

    您可以在socket上调用join方法,以将socket订阅到给定的通道/房间。例如,让我们创建一个名为“room-<room-number>”的房间并加入一些客户。此会议室已满时,请创建另一个房间并在那里加入客户。
    注意 - 我们目前正在默认名称空间(即'/')上执行此操作。您还可以以相同的方式在自定义命名空间中实现此功能。
    要加入房间,您需要房间名称作为join函数调用的参数。
    
    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. 3
    
  • 离开房间

    要离开房间,您需要像在套接字上调用join函数一样调用Leave函数。例如-要离开房间“room-1”
    
    socket.leave("room-"+roomno);