最佳答案
在服务器端使用带有 stream
块的 Sinatra。
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;
}
}
在 upstream
区试了 keepalive 1024
,在 location
区试了 proxy_set_header Connection keep-alive;
。
没有任何帮助:
没有未传递到任何客户端的持久连接和消息。