2011-09-15 3 views
0

Rails 3.1 프로젝트의 서버 전송 이벤트에 플러그인 em-eventsource (https://github.com/AF83/em-eventsource)를 사용하고 싶습니다. 내 문제는 이벤트를 듣고 메시지를 수신하는 방법 만 설명하고 특정 이벤트를 발생시켜 메시지를 보내는 방법은 설명하지 않는다는 것입니다. 액티브 레코드 옵저버 (Active Record-Observer)에서 이벤트를 제작하고 싶습니다. 이 이벤트를 생성하기 위해 EventMachine 작업을 연기해야한다고 생각하거나 어떻게 해결할 수 있습니까?Rails 3.1 - EventMachine으로 특정 이벤트 실행

네, Ruby on Rails 여야합니다. EventMachine에서이 작업을 수행하지 않으면 node.js로 전체 루비 부품을 우회하려고합니다.

답변

1

사실 저는이 라이브러리에서 메인테이너와 조금씩 작업했습니다. 나는 당신이 클라이언트 파트를 서버 하나와 혼합했다고 생각한다. em-eventsource는 ServerSentEvent API를 사용하는 데 사용할 수있는 클라이언트 라이브러리입니다. SSE를 실행하기위한 것이 아닙니다.

서버 측에서는 실행중인 서버가 스트리밍을 지원하는 한 레일즈 또는 다른 스택 (nodejs, php ...)을 사용하는지 여부는 중요하지 않습니다. Rails와 함께 제공되는 기본 웹 서버는 (Webrick은 아니지만) Thin, Puma, Goliath 등 많은 다른 기능이 있습니다.

레일에서 SSE를 실행하려면 다음 중 스트리밍 가능한 서버 언급 된 사람들은 SSE 사양을 준수합니다. 주로 클라이언트 (브라우저)가 응답해야한다는 것을 알 수 있도록 올바른 Content-type 헤더 ("text/event-stream")로 응답 한 다음 소켓에서 스트리밍을 시작합니다. 그 후반 부분은 Rails 3에서 오늘날까지는 불가능했던 것입니다 (그러나 불가능하지는 않습니다!). Rails 4는 이제 깨끗하고 간단한 내부 API를 사용하여 쉽게 스트리밍을 지원하므로 확실히 제공됩니다. 그 동안

, 당신은 좋겠 중 하나 레일에서 랙의 API와

  • 엉망
  • 하거나 영리하고 사용할 수 있도록이 (내 생각 EventMachine를 사용하여 야생에서 몇 가지 예제가 있습니다) 랙의 상단에 내장시나에서 제공하는 스트리밍 기능의
  • 를 (! 레일즈 하나에 장착 할 수시나 응용 프로그램의 예는 https://gist.github.com/1476463 참조) 또는 당신은 푸셔
  • 또는 활용 등의 외부 서비스를 사용할 수 있습니다 완전히 다른 스택 ...

좋은 개요 : http://blog.phusion.nl/2012/08/03/why-rails-4-live-streaming-is-a-big-deal/

0

아마도 잘못된 것입니다.하지만 IIRC Rails가 긴 풀링을 지원할 수없는 경우 일 수 있습니다. 레일스는 각 요청에 대해 전체 서버 (또는 서버 내부에서 둘 이상의 서버가 실행중인 경우 스레드)를 차단하고 전체 응답을 보내지 않으면 재사용 할 수 없습니다. 그래서 많은 동시 연결이있을 수 있다고 의심된다면 Rails 애플리케이션 앞에 역방향 프록시 (nginx와 같은)를 설치해야합니다. 전체 요청이 수신 될 때 클라이언트 요청을 프록시하고 Rails로 전송하십시오. 랙이 어떻게 작동하는지, 당신이 이것에 대해 할 수있는 일은별로 없습니다.

+0

나는 생각하지 않는다, 이것은 큰 문제가 될 것이다. 서버가 보낸 이벤트는 비동기 적으로 작동하기 때문에 thin 기반의 rails-app-server가 있습니다. 이는 이벤트 기반 비동기 처리를 명시 적으로 지원합니다. 그래서 긴 폴링이 아닙니다. 하지만 지금은 단 하나의 연결로 작동하지도 않습니다 ... –

관련 문제