我想在我的應用程序中利用服務器發送的事件。我正在使用Sinatra和sinatra-sse
寶石。這寶石包裝Sinatra stream :keep_alive
電話。Sinatra與彪馬流?
在Thin上運行我的應用程序時,我完全沒有問題,並且我的事件流按預期工作。但是,當我切換我的應用程序與Puma運行一切正常,除了我的sse_stream
完全沒有!它只是返回一個空白頁面。
我流設置像這樣
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
我開始瘦得像這樣:
@@puma_instance = Puma::Server.new MyApp::WebUI
@@puma_instance.add_tcp_listener ip, port
@@puma_instance.run
任何想法是怎麼回事?任何幫助,將不勝感激。
編輯:一些更多的信息 這是捲曲給出了彪馬
$ 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
$
運行時,而這是在薄
$ 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>
編輯會發生什麼:我要補充一點,我的應用程序使用EventMachine的在其核心,所以sinatra_sse
與EM的耦合很可能不是問題。
那麼,我的應用程序也使用EventMachine,所以我不認爲這是由EventMachine沒有運行引起的。此外,您鏈接的特定行似乎只用於在沒有數據發送時保持連接打開。我的應用程序定期發送大量數據,所以我認爲這與它沒有任何關係:/ –
@IlyaO。剛剛編輯了我的答案,並提供了Puma github問題的鏈接,概述了Puma實施async.callback的障礙。 –
剛剛給票打了個響。如果沒有其他人有任何補充,我會給你賞金。 –