Ich denke über die Verwendung von SSE, um neue Daten an den Client zu pushen und mit Flot (Javascript Charting-Bibliothek) "Live" Updates anzuzeigen. Mein Server läuft auf Python Flask Rahmen und ich habe herausgefunden, wie die Daten an den Client zu schieben, aber das Problem tritt auf, sobald ich die Seite verlassen:Flask-Server gesendet Ereignisse Socket-Ausnahme
Exception happened during processing of request from ('127.0.0.1', 38814)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 582, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 640, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 693, in finish
self.wfile.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
Ich verstehe, warum der Fehler auftritt - die Steckdose nie geschlossen, da die Endlosschleife "Live" -Daten liefert. Frage: Wie erkenne ich den Seitenwechsel und schließe den Socket sauber? Kann ich die Verbindung auf der Client-Seite schließen? Wie erkenne ich dann die Seitenänderung?
Dies ist der Server-Code Skelett, ich natürlich die Textnachricht mit json ersetzen würde die Liste der Objekte zu Bildschirm enthalten:
def event_stream():
import time
while True:
time.sleep(1)
yield "data: This is a message number X.\n\n"
@app.route('/stream')
def stream():
return Response(event_stream(), mimetype="text/event-stream")
Dies war die Lösung, zu der ich schließlich gekommen bin, danke für Ihre Antwort. – NindzAI
Das ist meiner Meinung nach eine schlechte Lösung. Es kann Speicherlecks verursachen, wenn der Browser es nicht ausführt (unerwartet abstürzt, Verbindung wird geschlossen usw.). –
Aus diesem Grund habe ich bemerkt, dass Sie in etwas wie Chrome vielleicht noch etwas zu tun haben (was dem Entwickler vielleicht erlaubt, solche Arten von Ereignissen auszulösen ...) – bbenne10