2013-09-03 18 views
10

Eksperymentuję z Railsami 4 ActionController::Live i zdarzeniami wysyłanymi przez serwer. Używam MRI 2.0.0 i Puma.Zdarzenia wysłane przez serwer i szyny przesyłane strumieniowo

Co widzę, każdy podłączony klient utrzymuje aktywne połączenie z serwerem. Zastanawiam się, czy możliwe jest wykorzystanie SSE bez utrzymywania wszystkich strumieni odpowiedzi.

Puma zarządza wieloma połączeniami za pomocą wątków i wyobrażam sobie, że istnieje ograniczenie liczby połączeń cuncurrent.
Co zrobić, jeśli chcę obsłużyć rzeczywisty scenariusz z tysiącami klientów rejestrujących się w mojej aplikacji Rails dla zdarzeń SSE?

Czy istnieje przykład?

Ponadto zwykle uruchamiam serwery aplikacji Rails za odwrotnym proxy nginx. Czy wymagałoby to jakiejś szczególnej konfiguracji?

Odpowiedz

3

Sposób, w jaki są tworzone pliki SSE, jest wykonywany przez klienta otwierającego połączenie z serwerem, który pozostaje otwarty do momentu, gdy serwer będzie miał dane do wysłania. Jest to część specyfikacji SSE, a nie rzecz charakterystyczna dla ActionController :: Live. Jest efektywnie taki sam, jak długi głosowanie, ale połączenie nie jest zamykane po zwrocie pierwszego bitu danych i mechanizmem wbudowanym w przeglądarkę.

Jako taki, jedynym sposobem, w jaki można go zrealizować, jest posiadanie wielu otwartych połączeń klienckich z serwerem internetowym, które pozostają bezterminowo. Jeśli chodzi o to, jakie zasoby są potrzebne, aby sobie z nimi poradzić, nie jestem pewien, ponieważ nie próbowałem jeszcze tego testować, ale potrzebuję wystarczającej liczby serwerów, aby Puma mogła otworzyć tysiące połączeń, jeśli masz tak wielu użytkowników z otwarta strona.

Domyślnym limitem dla puma jest 16 równoczesnych połączeń. Kilka blogów na temat konfigurowania SSE dla Railsów wspomina o zwiększeniu tej wartości do większej wartości, ale żadna z nich, którą znalazłem, nie sugeruje, jaka powinna być ta wyższa wartość. Wspominają, że liczba połączeń DB będzie musiała być taka sama, ponieważ każdy wątek Railsowania utrzymuje jeden z nich. Coś w rodzaju drogiego sposobu prowadzenia rzeczy.

"Uruchom test porównawczy" to jedyna odpowiedź naprawdę.

Nie mogę wypowiedzieć się na temat odwrotnego proxy, ponieważ tego nie próbowałem, ale ponieważ SSE są wykonywane przez standardowy HTTP, nie sądzę, że będzie potrzebował jakiejkolwiek specjalnej konfiguracji.

+0

OK, dziękuję za informację zwrotną! – tompave

+1

czy ktoś faktycznie zrobił taki test porównawczy? – nicolas

+0

Nie uruchomiłem testu porównawczego, ale w końcu odrzuciłem próbę jako _nowa produkcja ready_. Obawiam się, że w przypadku tego rodzaju scenariuszy musimy użyć modelu zdarzenia. – tompave

Powiązane problemy