socket.io комнаты или пространство имен?



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



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



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



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

783   3  

3 ответов:

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

  • оба пространства имен (io.of ('/nsp')) и комнаты (гнездо.join ('room'))создаются на стороне сервера
  • несколько пространств имен и несколько номеров доля же (WebSocket) соединение
  • сервер передавать сообщения по проводам только тем клиентам который подключен к / присоединился к NSP / room, т. е. это не просто фильтрация на стороне клиента

на различия:

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

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

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

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

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

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

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

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

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

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

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

  • номера: частный чат.
  • пространства имен: чат страницы.

Comments

    Ничего не найдено.