В каждом пространстве имен вы также можете определить произвольные каналы, к которым сокеты могут присоединяться и выходить. Эти каналы называются комнатами. Номера используются для дальнейшего разделения проблем. Комнаты также имеют одно и то же сокетное соединение, что и пространства имен. При использовании комнат нужно помнить, что их можно объединять только на стороне сервера.
Соединяющиеся комнаты
Вы можете вызвать метод соединения для сокета, чтобы подписать сокет на данный канал / комнату. Например, давайте создадим комнаты под названием 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('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
Выходя из комнаты
Чтобы покинуть комнату, вам нужно вызвать функцию выхода так же, как вы вызывали функцию соединения в сокете.
Например — покинуть комнату «комната-1» ,