В качестве предисловия
Захотел наш клиент сделать на проектe чат с блекджеком и куртизанками. NodeJs не мой профиль и опыта с ним у меня было не так много. (Поэтому статья адресована таким же новичкам в node и socket.io, как и я сам).
Тем не менее, один проект я делал и связан он был — да, да с
socket.io. Вот и в этот раз я подумал, что он идеально подойдет. Более того, на сайте даже есть демо и пример
чата. Но, как всегда в жизни, все оказывается сложнее, чем в примерах.
Чат из примера отсылал сообщения абсолютно всем. Было понятно что как-то надо добавить пользователей в комнату. И если мы взглянем в документацию
socket.io rooms and namespaces — здесь описано как работать с комнатами, но непонятно как они работают. Вот с этимм я предлагаю разобраться.
А чтобы понять как работают комнаты. Давайте начнем с самого начала — взглянем что же представляет из себя объект io.
var io = require('socket.io')(http);
Как видно IO хранит все идентификаторы подключенных сокетов. А это значит, зная иденификатор сокета мы можем найти его.
var socket = io.sockets.connected[socketId];
Т.е. каждый сокет при создании получает уникальный идентификатор, по которому его можно найти. А теперь давайте взглянем на сокет подключенный к определенной комнате.
var room = uuid.v4();
socket.join(room);
Как видно дефолтный ID сокета автоматически добавляется в rooms. Там же мы можем найти и ID нашей комнаты. Таким образом когда мы отсылаем сообщение в комнату
io.sockets.to(room).emit('message', {message: "details"});
Я могу предположить, что IO проходит по rooms приконекченных сокетов и рассылает сообщение им.
Все достаточно просто, верно? Но должен признаться в начале я никак не мог совладать с пониманием как работают комнаты. Так что надеюсь это статья кому-то будет полезна.
Комментарии (3)