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
と、接続が切断され、約1秒ごとに再接続が発生します。
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
何も役に立ちません:(
永続的な接続はなく、メッセージはどのクライアントにも渡されません。