Как работают rooms в Socket.io

    В качестве предисловия

    Захотел наш клиент сделать на проектe чат с блекджеком и куртизанками. NodeJs не мой профиль и опыта с ним у меня было не так много. (Поэтому статья адресована таким же новичкам в node и socket.io, как и я сам).

    Тем не менее, один проект я делал и связан он был — да, да с socket.io. Вот и в этот раз я подумал, что он идеально подойдет. Более того, на сайте даже есть демо и пример чата. Но, как всегда в жизни, все оказывается сложнее, чем в примерах.

    Чат из примера отсылал сообщения абсолютно всем. Было понятно что как-то надо добавить пользователей в комнату. И если мы взглянем в документацию socket.io rooms and namespaces — здесь описано как работать с комнатами, но непонятно как они работают. Вот с этимм я предлагаю разобраться.

    А чтобы понять как работают комнаты. Давайте начнем с самого начала — взглянем что же представляет из себя объект io.

    var io = require('socket.io')(http);
    


    image

    Как видно IO хранит все идентификаторы подключенных сокетов. А это значит, зная иденификатор сокета мы можем найти его.

    var socket = io.sockets.connected[socketId];
    


    Т.е. каждый сокет при создании получает уникальный идентификатор, по которому его можно найти. А теперь давайте взглянем на сокет подключенный к определенной комнате.

    var room = uuid.v4();
    socket.join(room);
    


    image

    Как видно дефолтный ID сокета автоматически добавляется в rooms. Там же мы можем найти и ID нашей комнаты. Таким образом когда мы отсылаем сообщение в комнату

    io.sockets.to(room).emit('message', {message: "details"});
    


    Я могу предположить, что IO проходит по rooms приконекченных сокетов и рассылает сообщение им.

    Все достаточно просто, верно? Но должен признаться в начале я никак не мог совладать с пониманием как работают комнаты. Так что надеюсь это статья кому-то будет полезна.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 3

      0
      Вы серьезно? Оно как-то еще могло работать?

      > В качестве результата работы появился репозиторий — пример чата на socket.io на github.com который я сделал. Может послужить хорошим началом, если кто-то планирует делать свой чат.

      А примера как считать фибоначи у вас нет? А то я планирую начать считать их.
        –1
        Как вы думаете несет ли какую-то смысловую нагрузку ваш комментарий? Если вам все понятно — проходите мимо. В начале топика я отметил что стаья для новичков. Возможно вы хотели показать какой вы умный? Хм… боюсь что вышло наоборот.
        0
        что за отладчик

        Only users with full accounts can post comments. Log in, please.