альтернативы:
- socket.io (необработанный веб-сокет для NodeJS)
- juggernaut (полный протокол Байе для NodeJS /Rails)
- faye (полный протокол Bayeux для NodeJS / Rails) с Ruby-сервером
Совет: не используйте ruby в качестве сервера веб-сокетов,перейдите на NodeJS - мы обрабатываем тысячи сообщений каждый час без каких-либо проблем.
Мы использовали самую простую настройку из всех возможных, чтобы она работала - и она работает;)
Наша установка:
- Rails 3.0.9
- Redis
- NodeJS
- Socket.IO
Как мы его настроили:
Rails --PUB--> REDIS --SUB--> NodeJS --WEBSOCKET (SOCKET.IO)--> Client
Статья Redis PubSub - Как это работает?
Другой совет: по возможности избегайте аутентификации
Вот наш случай:
У нас есть что-то вроде инструмента управления проектами с виртуальной файловой системой.Допустим, вы просматриваете папку, а кто-то из вашей команды загружает новый файл.Теперь мы должны сообщить вам, что ваше мнение устарело - мы отправляем сообщение типа:
folder_id | last_change_timestamp
на канал folders:#{folder_id}
теперьклиент (который прослушивает folders:#{folder_id}
получает эти сообщения и видит: «К сожалению, мое мнение устарело» и показывает сообщение «Ваше мнение устарело, нажмите> здесь <, чтобы обновить». </p>
Хорошая вещьМы не нуждаемся в какой-либо аутентификации, потому что:
- если у вас нет доступа к проекту, вам нужно угадать folder_id для подписки на канал
- , даже если вам удастсячтобы подписаться на канал, единственная информация, которую вы получаете, это то, что что-то изменилось - не более, не менее;)