Socket.io-rooms

提供:Dev Guides
移動先:案内検索

Socket.IO-客室

各名前空間内で、ソケットが参加および離脱できる任意のチャネルを定義することもできます。 これらのチャンネルは部屋と呼ばれます。 部屋は懸念をさらに分離するために使用されます。 部屋は、名前空間のような同じソケット接続も共有します。 ルームを使用する際に留意すべきことの1つは、サーバー側でのみ参加できるということです。

入室

ソケットで join メソッドを呼び出して、指定されたチャンネル/ルームにソケットをサブスクライブできます。 たとえば、 'room- <room-number>' という名前の部屋を作成し、いくつかのクライアントに参加してみましょう。 この部屋がいっぱいになるとすぐに、別の部屋を作成し、そこにクライアントを参加させます。

-現在、デフォルトのネームスペースでこれを行っています。 '/'. 同じ方法でカスタム名前空間にこれを実装することもできます。

ルームに参加するには、参加関数呼び出しの引数としてルーム名を指定する必要があります。

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res) {
   res.sendfile('indexl');
});

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>

これで、3つのクライアントを接続すると、最初の2つのクライアントは次のメッセージを取得します-

You are in room no. 1

最後のクライアントは次のメッセージを取得します-

You are in room no. 2

ルーム

部屋を出る

退室するには、ソケットでjoin関数を呼び出したときと同じようにleave関数を呼び出す必要があります。

例-部屋 'room-1' を離れるには、

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