2012-07-22 8 views
6

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?

+0

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

+0

[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

Respuesta

3

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") 
+0

¿Qué es 'i_should_close_the_connection'? ¿Podrías explicar un poco más? – hllau

+0

Es un booleano. Puede usar esa instrucción 'if' como lo haría en Python. – gioi

+0

Dame un código y estaré encantado de ayudarte. – gioi

Cuestiones relacionadas