Du côté du serveur, en utilisant Sinatra avec un fichier de type stream
bloc.
get '/stream', :provides => 'text/event-stream' do
stream :keep_open do |out|
connections << out
out.callback { connections.delete(out) }
end
end
Du côté client :
var es = new EventSource('/stream');
es.onmessage = function(e) { $('#chat').append(e.data + "\n") };
Lorsque j'utilise l'application directement, via http://localhost:9292/
tout fonctionne parfaitement. La connexion est persistante et tous les messages sont transmis à tous les clients.
Cependant, quand il passe par Nginx, http://chat.dev
la connexion est interrompue et une reconnexion a lieu toutes les secondes environ.
La configuration de Nginx me semble correcte :
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;
}
}
Essayé keepalive 1024
en upstream
ainsi que proxy_set_header Connection keep-alive;
en location
.
Rien n'y fait :(
Aucune connexion persistante et aucun message n'est transmis aux clients.