На стороні сервера за допомогою Sinatra з stream
блоком.
get '/stream', :provides => 'text/event-stream' do
stream :keep_open do |out|
connections << out
out.callback { connections.delete(out) }
end
end
На стороні клієнта:
var es = new EventSource('/stream');
es.onmessage = function(e) { $('#chat').append(e.data + "\n") };
Коли я використовую додаток безпосередньо, через http://localhost:9292/
, все працює ідеально. З’єднання постійне, і всі повідомлення передаються всім клієнтам.
Однак, коли він проходить через Nginx, http://chat.dev
з'єднання розривається, і повторне підключення запускається щосекунди або близько того.
Налаштування Nginx мені здається нормальним:
upstream chat_dev_upstream {
server 127.0.0.1:9292;
}
server {
listen 80;
server_name chat.dev;
location / {
proxy_pass http://chat_dev_upstream;
proxy_buffering off;
proxy_cache off;
proxy_set_header Host $host;
}
}
Пробували keepalive 1024
в upstream
розділі, як і proxy_set_header Connection keep-alive;
в location
.
Нічого не допомагає :(
Жодні постійні зв’язки та повідомлення не передаються жодному клієнту.