Я использую Amazon Elastic Beanstalk (Nginx 1.4.2 + Passenger 4.0.20 + Ruby 1.9.3) для развертывания приложения sinatra, которое использует события, отправленные сервером. Все работает отлично на локальной машине, используя тонкие. Однако на AWS Elastic Beanstalk соединение падает после миллисекунд.Server Sent Events/EventSource с Sinatra на эластичном бобовом стебле
сервер код выглядеть следующим образом:
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) под блоком сервера и хотя ответ заголовка меняется, он еще не работает.
(я должен был установить X-Accell-буферизацию на Nginx файла, а также, потому что она не будет принимать параметры, установленные в серверном коде с Синатрой)
заголовок ответа выглядит следующим образом:
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
Любые идеи?
Заранее спасибо.
Я пробовал это, и он не работал. Я закончил тем, что отказался от Elastic Beanstalk и ngnix, используя обычный экземпляр EC2. – buzali