Ich versuche Server-Gesendete Ereignisse in meiner Anwendung zu nutzen. Ich benutze Sinatra und den Edelstein sinatra-sse
. Dieses Juwel umschließt den Sinatra stream :keep_alive
-Aufruf.
Beim Ausführen meiner Anwendung auf Thin habe ich absolut keine Probleme, und mein Ereignisstrom funktioniert wie erwartet. Allerdings, als ich meine Anwendung auf Puma umgestellt habe funktioniert alles, außer dass meine sse_stream
absolut nichts tut! Es gibt nur eine leere Seite zurück.
Mein Stream ist so eingerichtet
%Vor%Ich fange an Thin wie folgt:
%Vor%Irgendeine Idee was ist los? Jede Hilfe wäre willkommen.
BEARBEITEN: einige weitere Informationen Dies ist, was cURL gibt, wenn es auf Puma läuft
%Vor%Während dies auf Thin passiert
%Vor% EDIT: Ich sollte hinzufügen, dass meine Anwendung EventMachine in ihrem Kern verwendet, so dass die Kopplung von sinatra_sse
mit EM höchstwahrscheinlich kein Problem ist.
Ich glaube, das Thema dreht sich um sinatra-ses explizite Verwendung der EventMachine-Bibliothek, die nicht als Abhängigkeit auflistet . Es zeigt jedoch Thin in seiner Gemfile und EventMachine ist eine Kernabhängigkeit von < a href="https://github.com/macournoyer/thin/blob/master/thin.gemspec#L23"> Dünn .
Pumas Concurrency-Modell ist ganz anders . In der Tat finden Sie die folgende Aussage rechts oben in der README :
Puma verbessert immer noch den MRT-Durchsatz, indem es das Blockieren von IO gleichzeitig ermöglicht (EventMachine-basierte Server wie Thin deaktivieren diese Fähigkeit und erfordern die Verwendung spezieller Bibliotheken).
BEARBEITEN
Wenn Sie mehr über Rack, Rails, Puma und SSE erfahren möchten, können Sie diesen tollen Blogpost von Aaron Patterson, einem Ruby / Rails-Kernmitglied und Allround-Swell-Typ.