Di seguito è stata fornita una risposta utilizzando node.js.Come si chiude una connessione Server-Invia eventi in Flask?
How to close a "Server-Sent Events"-connection on the server?
Tuttavia, come fare la stessa cosa in pitone Flask?
Di seguito è stata fornita una risposta utilizzando node.js.Come si chiude una connessione Server-Invia eventi in Flask?
How to close a "Server-Sent Events"-connection on the server?
Tuttavia, come fare la stessa cosa in pitone Flask?
Bene, dipende dall'architettura della tua app.
Lasciate che vi mostri un esempio (si veda il codice a https://github.com/jkbr/chat/blob/master/app.py):
def event_stream():
pubsub = red.pubsub()
pubsub.subscribe('chat')
for message in pubsub.listen():
print message
yield 'data: %s\n\n' % message['data']
@app.route('/stream')
def stream():
return flask.Response(event_stream(),
mimetype="text/event-stream")
Flask chiede un nuovo messaggio a Redis (operazione di chiusura) costantemente, ma quando Flask vede che termina in streaming (StopIteration
, se non sono nuovi a Python), restituisce.
def event_stream():
pubsub = red.pubsub()
pubsub.subscribe('chat')
for message in pubsub.listen():
if i_should_close_the_connection:
break
yield 'data: %s\n\n' % message['data']
@app.route('/stream')
def stream():
return flask.Response(event_stream(),
mimetype="text/event-stream")
Sembra che l'autore di Flask non abbia ancora un piano per supportarlo. Per "Eventi inviati dal server", è meglio utilizzare un'architettura basata sugli eventi come NodeJS. – hllau
[questo commento] (http://stackoverflow.com/questions/32273937/how-to-redirect-when-server-sent-event-is-finished-in-flask-on-server-side#comment52434617_32275299) era anche molto utile per una domanda simile – colidyre