Auf der Serverseite mit Sinatra mit einem stream
Block.EventSource/Server-Gesendete Ereignisse über Nginx
get '/stream', :provides => 'text/event-stream' do
stream :keep_open do |out|
connections << out
out.callback { connections.delete(out) }
end
end
Auf Client-Seite:
var es = new EventSource('/stream');
es.onmessage = function(e) { $('#chat').append(e.data + "\n") };
Wenn ich direkt mit App, über http://localhost:9292/
, alles funktioniert perfekt. Die Verbindung ist dauerhaft und alle Nachrichten werden an alle Clients übergeben.
Jedoch, wenn es durch Nginx geht, http://chat.dev
, wird die Verbindung fallen gelassen und eine Wiederverbindung wird jede Sekunde oder so ausgelöst.
Nginx Setup sieht für mich ok:
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;
}
}
Versuchte keepalive 1024
in upstream
Abschnitt sowie proxy_set_header Connection keep-alive;
in location
.
Nichts hilft :(
keine persistenten Verbindungen und Nachrichten nicht an Kunden weitergegeben.
Oh, das war es! Arbeite jetzt! Starten Sie meinen Über-Chat mit der Öffentlichkeit! Vielen Dank! –
funktioniert es gut für meinen Nodejs Server mit ngix, ich benutze auch EventSource.thanks. –
Funktioniert so gut. Mann, das war schwer zu debuggen. Vielen Dank! –