Rails 3.1 - запуск определенного события с помощью EventMachine - PullRequest
0 голосов
/ 16 сентября 2011

Я хотел бы использовать плагин em-eventsource (https://github.com/AF83/em-eventsource) для отправляемых сервером событий в Rails 3.1-проекте.Моя проблема в том, что здесь объясняется только, как прослушивать события и получать сообщения, а не как запустить конкретное событие и отправить сообщение.Я хотел бы создать событие в Active Record-Observer.Прав ли я, когда думаю, что мне нужно отложить операцию с EventMachine для создания этого события, или как я могу решить это?

И да, это должен быть Ruby on Rails.Если я не получу это для работы с EventMachine, я попытаюсь обойти всю ruby-часть с помощью node.js.

Ответы [ 2 ]

1 голос
/ 13 декабря 2012

На самом деле я немного работал над этой библиотекой с сопровождающим. Я думаю, что вы смешали клиентскую часть с серверной. em-eventsource - это библиотека client , которую можно использовать для использования API ServerSentEvent, она не предназначена для запуска SSE.

На стороне сервера совершенно не имеет значения, используете ли вы Rails или любой другой стек (nodejs, php…), если сервер, на котором вы работаете, поддерживает потоковую передачу. Веб-сервер по умолчанию, поставляемый с Rails, не (Webrick), но есть много других, которые делают: Thin, Puma, Goliath…

Чтобы запустить SSE в Rails, вам придется использовать как сервер с поддержкой потоковой передачи, так и соблюдать спецификацию SSE. Он в основном сводится к тому, чтобы сначала ответить соответствующим заголовком Content-type («text / event-stream»), чтобы клиент (браузер) знал, что он должен зависнуть, а затем начать потоковую передачу по сокету. Эта последняя часть не так легко возможна на сегодняшний день в Rails 3 (но не невозможна!); Rails 4 на самом деле теперь поддерживает потоковую передачу простым способом, с чистым и простым внутренним API, так что он обязательно придет.

А пока вы либо:

  • путаница с Rack API в Rails (с помощью EventMachine, я думаю, есть несколько примеров в дикой природе)
  • или сделайте это умным и используйте функцию потоковой передачи, предоставляемую Sinatra, построенную поверх Rack (см. https://gist.github.com/1476463 для примера приложения Sinatra, которое можно монтировать в Rails!)
  • или вы можете использовать внешний сервис, такой как Pusher
  • или используйте совершенно другой стек ...

Хороший обзор: http://blog.phusion.nl/2012/08/03/why-rails-4-live-streaming-is-a-big-deal/

0 голосов
/ 16 сентября 2011

Может быть, я ошибаюсь, но если IIRC Rails не может поддерживать длинный пул.Rails блокирует весь сервер (или поток, если у вас есть несколько работающих внутри сервера) для каждого запроса и не может использовать их повторно, пока не будет отправлен весь ответ.Вот почему вы должны установить обратный прокси-сервер (например, nginx) перед приложением Rails, если вы подозреваете, что может быть много одновременных подключений - чтобы прокси замедлял запросы клиентов и отправлял их в Rails, когда весь запрос получен.Это просто, как работает Rack, вы вряд ли можете с этим поделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...