2012-07-22 11 views
6

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?

+0

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

+0

[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

risposta

3

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

Qual è il 'i_should_close_the_connection'? Spiegheresti un po 'di più? – hllau

+0

È un booleano. Puoi usare quell'istruzione 'if' come faresti in Python. – gioi

+0

Datemi un codice e sarei felice di aiutarvi. – gioi

Problemi correlati