2013-09-03 1 views
10

레일 4 ActionController::Live 및 서버 보낸 이벤트를 실험하고 있습니다. MRI 2.0.0과 Puma를 사용하고 있습니다.서버 보낸 이벤트 및 레일 스트리밍

내가 볼 수있는 것처럼 연결된 각 클라이언트는 서버에 활성 연결을 유지합니다. 모든 응답 스트림을 계속 실행하지 않고 SSE를 활용할 수 있는지 궁금합니다.

푸마는 스레드를 사용하여 여러 연결을 관리하며 현재 연결 수에 제한이 있다고 생각합니다.
SSE 이벤트 용 Rails 앱에 수천 명의 클라이언트가 등록되어있는 실제 시나리오를 지원하려면 어떻게해야합니까?

예가 있습니까?

또한 나는 보통 nginx 역방향 프록시 뒤에 Rails 응용 프로그램 서버를 실행합니다. 특정 설정이 필요합니까?

답변

3

SSE가 구축되는 방식은 클라이언트가 서버에 연결하여 서버에 보낼 데이터가있을 때까지 열린 상태로 유지하는 것입니다. 이것은 SSE 스펙의 일부이며 ActionController :: Live에만 해당하는 것이 아닙니다. 사실상 긴 폴링과 동일하지만, 데이터의 첫 번째 비트가 반환 된 후 연결이 닫히지 않고 브라우저에 메커니즘이 내장되어 있습니다.

이와 같이 구현할 수있는 유일한 방법은 무한정 앉아있는 웹 서버에 대한 여러 개의 열린 클라이언트 연결을 설정하는 것입니다. 아직 벤치마킹을 시도하지는 않았으므로 확신 할 수는 없지만 많은 사용자가있는 경우 Puma가 수천 개의 연결을 유지하는 데 충분한 서버가 필요합니다. 페이지가 열린다.

푸마의 기본 한계는 16 개의 동시 연결입니다. Rails 용 SSE 설정에 관한 여러 블로그 게시물은이를 더 큰 가치로 올리는 것을 언급하지만, 내가 찾은 그 어떤 것도이 높은 가치가 무엇인지 제시하지 못한다. 각 Rails 스레드가 하나의 실행을 유지함에 따라 DB 연결 수는 동일해야한다고 언급합니다. 사물을 돌리는 비싼 방법 같은 소리의 종류.

"벤치 마크 실행"이 실제로 유일한 대답입니다.

역방향 프록시에 대해서는 언급하지 않았지만 SSE가 표준 HTTP를 통해 수행되기 때문에 특별한 설정이 필요하지 않습니다.

+0

의견을 보내 주셔서 감사합니다. – tompave

+1

누구나 실제로 이러한 벤치 마크를 수행 했습니까? – nicolas

+0

벤치 마크를 실행하지는 않았지만 결국에는 _non production ready_와 같은 시도를 기각했습니다. 이런 종류의 시나리오에서는 이벤트 모델을 사용해야 할 필요가 있습니다. – tompave

관련 문제