Ich versuche Server-Gesendete Ereignisse in meiner Anwendung zu nutzen. Ich benutze Sinatra und das sinatra-sse
Juwel. Dieses Juwel umschließt den Sinatra stream :keep_alive
Anruf.Sinatra Streaming mit Puma?
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.
ist mein Strom wie so
get "/logstream/:server" do
if rbcserver = MyApp.servers[params[:server]]
sse_stream do |stream|
rbcserver.add_web_logger(stream)
stream.callback { rbcserver.remove_web_logger(stream) }
end
else
error 404
end
end
Ich fange Thin wie so ein:
@@puma_instance = Puma::Server.new MyApp::WebUI
@@puma_instance.add_tcp_listener ip, port
@@puma_instance.run
Jede Idee, was los ist? Jede Hilfe wäre willkommen.
EDIT: einige weitere Informationen Dies ist, was cURL gibt, wenn auf Puma
$ curl -L -b cookies.txt -c cookies.txt -i http://localhost:9001/logstream/myserver
HTTP/1.1 200 OK
Content-Type: text/event-stream;charset=utf-8
X-Content-Type-Options: nosniff
Transfer-Encoding: chunked
$
läuft Während das, was Thin geschieht auf
ist$ curl -L -b cookies.txt -c cookies.txt -i http://localhost:9001/logstream/myserver
HTTP/1.1 200 OK
Content-Type: text/event-stream;charset=utf-8
X-Content-Type-Options: nosniff
Connection: close
Server: thin 1.5.1 codename Straight Razor
event: <event name>
data: <my data>
event: <event name>
data: <my data>
<continues as more data comes in>
EDIT: Ich sollte hinzufügen, dass meine Bewerbung eventmachine verwendet in seinem Kern, so sinatra_sse
Kopplung an EM ist höchstwahrscheinlich kein Problem.
Nun, meine Anwendung verwendet EventMachine auch, also glaube ich nicht, dass dies von EventMachine nicht ausgeführt wird. Auch diese bestimmte Linie, die Sie verbunden haben, scheint nur dazu verwendet zu werden, die Verbindung offen zu halten, wenn keine Daten gesendet werden. Meine Anwendung sendet regelmäßig eine großzügige Menge an Daten, also glaube ich nicht, dass das etwas damit zu tun hat:/ –
@IlyaO. Ich habe meine Antwort mit einem Link zu einem Puma-GitHub-Problem bearbeitet, das die Roadblocks für eine Puma-Implementierung von async.callback umreißt. –
Nur gab das Ticket eine Beule. Ich gebe dir das Kopfgeld, wenn niemand etwas hinzuzufügen hat. –