【问题标题】:Server Sent Events / EventSource with Sinatra on Elastic Beanstalk在 Elastic Beanstalk 上使用 Sinatra 的服务器发送事件/事件源
【发布时间】:2013-12-05 01:29:36
【问题描述】:

我正在使用 Amazon Elastic Beanstalk (Nginx 1.4.2 + Passenger 4.0.20 + Ruby 1.9.3) 来部署一个使用服务器发送事件的 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

有什么想法吗?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    您是否尝试过 cmets 中的建议?这些对我来说似乎更合乎逻辑

    proxy_buffering off;
    proxy_cache off;
    

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

    【讨论】:

    • 我试过了,但没用。我最终使用常规 EC2 实例丢弃了 Elastic Beanstalk 和 ngnix。
    • 我有类似的问题,我有一个 Flask 应用程序,它有一个从数据库读取的流,它在本地机器上运行良好,但在 Beanstalk 上它有时工作有时不需要我改变任何东西。真的很迷茫!
    猜你喜欢
    • 2020-06-20
    • 2011-07-10
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2013-01-11
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多