Lo siguiente ha dado una respuesta usando node.js.¿Cómo cierro una conexión Servidor-Enviar Eventos en el Frasco?
How to close a "Server-Sent Events"-connection on the server?
Sin embargo, la forma de hacer lo mismo en pitón frasco?
Lo siguiente ha dado una respuesta usando node.js.¿Cómo cierro una conexión Servidor-Enviar Eventos en el Frasco?
How to close a "Server-Sent Events"-connection on the server?
Sin embargo, la forma de hacer lo mismo en pitón frasco?
Bueno, depende de la arquitectura de su aplicación.
Permítanme mostrarles un ejemplo (véase el código en 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")
Frasco pide un nuevo mensaje a Redis (operación de bloqueo) de manera constante, pero cuando Frasco ve que termina en streaming (StopIteration
, si se quiere no son nuevos en Python), regresa.
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")
Parece que el autor de Flask no tiene un plan para admitir eso todavía. Para "Eventos enviados por el servidor", es mejor utilizar una arquitectura basada en eventos como NodeJS. – hllau
[este comentario] (http://stackoverflow.com/questions/32273937/how-to-redirect-when-server-sent-event-is-finished-in-flask-on-server-side#comment52434617_32275299) también fue muy útil para una pregunta similar – colidyre