一开始很抱歉。我的英语不好......
我正在尝试Rails4中的服务器发送事件(Ruby on Rails)。
sse_controller.rb
def test_sse
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new(response.stream)
puts 'New SSE = '+sse.to_s
begin
loop do
sse.write({ nowtimes: Time.new}, event: 'timer')
end
ensure
sse.close
end
end
mypage.html.erb
$(document).ready(function(){
var evtSource = new EventSource("/sse/test_sse");
evtSource.addEventListener('timer', function(e) {
obj = JSON.parse(e.data);
console.log(obj.nowtimes);
});
})
我使用NGINX作为我的网络服务器。
我使用 Passenger 作为我的应用服务器。它工作得很好,但不能支持多线程。它只能同时打开6个标签。
当我尝试 PUMA 作为我的应用服务器时,它的工作很奇怪。客户端的SSE正在尝试不间断地重新连接。
如果我使用Passenger,我应该如何解决有关连接数的问题?
或者如果我使用PUMA,我应该如何解决重新连接的循环?
答案 0 :(得分:2)
首先,基于此我不会使用PUMA作为应用服务器。 Passenger表现正常:6 tab限制是浏览器连接限制。如果你并排浏览Chrome和Firefox,你应该可以获得12个连接。
请参阅http://www.browserscope.org/?category=network&v=1处的每个主机名的连接列 (有关如何自定义连接限制的一些信息,请访问:https://stackoverflow.com/a/16855830/841830)
顺便问一下,你的loop do ... end
不应该睡觉吗?否则它将如此快地抽出SSE消息,浏览器将无法跟上。在这种测试SSE脚本中,一秒睡眠是正常的。