2010-12-11 3 views
2

Допустим, у вас есть сайт, на котором пользователи могут открывать чаты. Когда комната открывается, пользователи могут приглашать других и общаться в чате.Какова наилучшая практика для серверов (ов) WebSocket?

Позволяет также притворяться, что вы хотите использовать WebSockets для связи с клиентами. В большинстве серверных реализаций WebSocket существует простая функция, такая как connection.broadcast(message), которая отправляет сообщения всем подключенным хостам, но не тем, кто инициировал трансляцию. Это отличная функция, потому что вам не нужно сохранять список всех клиентов для себя, чтобы они обновлялись. Проблема с примером в чате заключается в том, что в этом случае вы не хотите передавать каждое сообщение всем, но только другим клиентам, находящимся в одной комнате.

Это оставляет меня с двумя вариантами:

  • Ролл своей собственной broadcastToRoom(room_id) функции, которая, в свою очередь, означает, что для отслеживания всех клиентов и номера.
  • Создавать новый экземпляр сервера (на новом порту) каждый раз, когда создается новая комната.

Что вы хотите сделать?

+0

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

ответ

5

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

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

Но имейте в виду, что из-за недавно обнаруженной проблемы безопасности с текущей спецификацией WebSocket обе Opera и Mozilla отключили поддержку WebSocket до тех пор, пока не будет выпущена новая версия. Таким образом, для WebSockets потребуется больше времени, чтобы иметь широкую доступность, а сервер должен перейти на новую версию.

Для получения дополнительной информации см:
http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/
http://blog.pusherapp.com/2010/12/9/it-s-not-websockets-it-s-your-broken-proxy

+0

2017 обновление: я считаю, Mozilla теперь поддерживает, и мы опускаемся в Opera и очень старый IE – vapurrmaid

Смежные вопросы