socket.io комнаты или namespacing?

Я изучаю nodejs / socket.io для чата реального времени, и мне нужен совет для реализации комнат.

Что лучше, используя пространство имен или используя функцию комнаты, чтобы полностью изолировать обрывки болтовни друг от друга?

какова реальная техническая разница между комнатами и пространством имен?

Есть ли разница в использовании ресурсов?

Это то, что имеют пространства имен и комнаты (socket.io v0.9.8 – обратите внимание, что v1.0 включил полную переписку, поэтому все могло измениться):

  • Оба пространства имен ( io.of (‘/ nsp’) ) и номера ( socket.join (‘room’) ) создаются на стороне сервера
  • Несколько пространств имен и несколько комнат имеют одинаковое (WebSocket) соединение
  • Сервер будет передавать сообщения по кабелю только тем клиентам, которые подключены к / nsp / room, т. Е. Это не только фильтрация на стороне клиента

Различия :

  • пространства имен подключаются клиентом с помощью io.connect(urlAndNsp) (клиент будет добавлен в это пространство имен, только если он уже существует на сервере)
  • номера могут быть объединены только на стороне сервера (хотя создание API на стороне сервера, чтобы клиенты могли присоединиться, прост)
  • пространства имен могут быть защищены авторизацией
  • авторизация недоступна в комнатах , но пользовательское разрешение может быть добавлено к вышеупомянутому, легко создаваемому API на сервере, в случае, если один из них склонен к использованию комнат
  • номера являются частью пространства имен (по умолчанию используется глобальное пространство имен)
  • пространства имен всегда уходят корнями в глобальную область

Чтобы не путать концепцию с именем (комнатой или пространством имен), я буду использовать купе, чтобы ссылаться на концепцию, и на два других имени для реализации концепции. Так что если вы

  • требуется авторизация на каждом купе , пространство имен может быть самым простым путем
  • если вы хотите иерархически слоистые отсеки (максимум 2 слоя), используйте компиляцию пространства имен / комнаты
  • если ваше клиентское приложение состоит из разных частей, которые (не заботятся о себе, кроме отсеков, но) должны быть отделены друг от друга, используйте пространства имен.

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

Не имея на самом деле бенчмаркинга это, мне кажется, если вам просто нужны простые отсеки в вашем проекте для разделения и группировки сообщений, один из них в порядке.

Не уверен, что это отвечает на ваш вопрос, но исследования, ведущие к этому ответу, по крайней мере помогли мне увидеть яснее.

Это старый вопрос, но, проведя некоторое исследование по этой теме, я обнаружил, что принятый ответ неясен в важном вопросе. По словам самого Гильермо Рауча ( см. Ссылку ): хотя теоретически возможно динамически создавать пространства имен в запущенном приложении, которое вы используете в основном в виде предопределенных отдельных разделов вашего приложения. Если, с другой стороны, вам нужно создавать специальные отсеки, на лету, для размещения групп пользователей / соединений, лучше всего использовать комнаты.

Это зависит от того, что вы хотите сделать.

Главное отличие состоит в том, что помещения сложнее реализовать. Вы должны сделать способ присоединиться к комнатам с каждой перезагрузкой страницы.

В пространствах имен вам просто нужно написать var example = io.connect('http://localhost/example'); в вашем javascript-клиенте и клиенте автоматически добавляются в пространства имен.

Пример использования:

  • номера: частный чат.
  • namespaces: чат страницы.
  • Какую библиотеку websocket использовать с Node.js?
  • Получить IP-адрес клиента в socket.io
  • Node.js - Как удалить порт из URL-адреса?
  • Различия между socket.io и websockets
  • Аутентификация Socket.IO
  • отключение клиента от сервера с помощью socket.io и nodejs
  • Примеры использования RedisStore в socket.io
  • Надежность транспорта Websocket (потеря данных Socket.io при повторном подключении)
  • Как повторно использовать соединение redis в socket.io?
  • Давайте будем гением компьютера.