Хороший вопрос - реализовав нечто подобное, позвольте мне объяснить, как это работает:
Подключения
«Живое» веб-приложение на самом деле вовсе не «живое» — оно просто получило постоянный запрос; это означает, что оно по-прежнему работает точно так же, как «обычное» приложение Rails, за исключением того, что клиенты не закрывают соединение (поэтому вы заинтересованы в открытии другого порта)
В том, как вы обрабатываете запрос, происходит волшебство. Это касается как клиентской части, так и Rails (серверной).
Клиенты
Когда вы подключаетесь к приложению «чат», ваш браузер открывает живое соединение с сервером. Обычно это делается с помощью событий, отправленных сервером (длительный опрос Ajax), или веб-сокеты
Это работает так: для открытия соединения используется обычное промежуточное ПО Rails ActionDispatch и затем разрешите вам подключиться
Если вы играли с функциональностью ActionController::Live, вы обнаружите, что это не типичное действие контроллера. На самом деле это отдельная технология (например, resque или Redis), который вы вызываете из другого действия контроллера. Это дает возможность делать классные вещи с
Сервер
То, как вы справитесь с чем-то подобным, состоит в том, чтобы разделить «живую» функциональность и «обычное» приложение Rails. Это один из текущих недостатков Rails — в этом, вероятно, лучше что-то реализовать например, nodeJS
с socket.io
для обработки данных в реальном времени (с конечной точкой, такой как chat.yourapp.com
), в то время как использование Rails для обработки аутентификации и авторизации
С точки зрения сервера, его работа заключается в обработке входящих и исходящих запросов, а не в обработке постоянных соединений. Поэтому я думаю, вы можете посмотреть, как вы могли бы «аутсорсить» подключение к веб-сокету. По общему признанию, мой опыт в этой области немного скуден, так что вы можете хорошо поискать в сети.
Решения
Мы успешно использовали стороннюю систему под названием Pusher.
Это система веб-сокетов, которая позволяет вам открывать постоянное соединение в качестве клиента и интегрируется с Rails аналогично Redis (вы можете нажать на нее).
Это означает, что вы можете размещать приложение «чат» с помощью Rails (http://yourapp.com/chat
), отправлять сообщения в свое приложение Rails (http://yourapp.com/chat/send) и обрабатывать входящие чаты от отправителя (или аналогичного)
person
Richard Peck
schedule
14.01.2014
jquery-pjax
gem. Обратите внимание, что ваш сервер должен поддерживать функцию push_state. - person BroiSatse   schedule 14.01.2014