服务器在Elastic Beanstalk上使用Sinatra发送事件/事件源

时间:2013-11-20 20:31:36

标签: nginx sinatra passenger elastic-beanstalk server-sent-events

我使用Amazon Elastic Beanstalk(Nginx 1.4.2 + Passenger 4.0.20 + Ruby 1.9.3)来部署使用Server Sent Events的sinatra应用程序。一切都在使用薄的本地机器上完美运行。但是,在AWS Elastic Beanstalk上,连接在毫秒后被删除。

服务器代码如下所示:

get '/stream', provides: 'text/event-stream' do
  response.headers['X-Accel-Buffering'] = 'no'
  stream :keep_open do |out|
    settings.connections << out
    out.callback { settings.connections.delete(out) }
  end
end

在服务器日志中,我看到连接超时:

2013/11/20 19:45:46 [info] 9716#0: *35 client closed connection while waiting for request, client: xxx.xxx.xxx.xxx, server: 0.0.0.0:80

在服务器块下尝试了此处建议的nginx配置(EventSource / Server-Sent Events through Nginx),尽管标头响应发生了变化,但它还没有工作。

(我不得不在Nginx文件上设置X-Accell-Buffering,因为它不会在sinatra的服务器代码中设置设置)

响应头看起来像这样:

HTTP/1.1 200 OK
Content-Type: text/event-stream;charset=utf-8
Date: Wed, 20 Nov 2013 20:03:06 GMT
Server: nginx/1.4.2 + Phusion Passenger 4.0.20
Status: 200 OK
X-Accel-Buffering: no
X-Content-Type-Options: nosniff
X-Powered-By: Phusion Passenger 4.0.20
transfer-encoding: chunked
Connection: keep-alive

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您是否在评论中尝试了这个建议?那些似乎对我更合乎逻辑

proxy_buffering off;
proxy_cache off;

如果这些配置不起作用,请分享您当前的配置。