我想在我的应用程序中利用服务器发送的事件。我正在使用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的障碍。 –
刚刚给票打了个响。如果没有其他人有任何补充,我会给你赏金。 –