2012-07-22 45 views
6

下面給出了使用node.js的答案。如何關閉Flask中的Server-Send Events連接?

How to close a "Server-Sent Events"-connection on the server?

但是,如何做到在python瓶同樣的事情?

+0

看來Flask的作者還沒有計劃支持。對於「服務器發送的事件」,最好使用像NodeJS這樣的事件驅動架構。 – hllau 2012-08-14 04:45:30

+0

[this comment](http://stackoverflow.com/questions/32273937/how-to-redirect-when-server-sent-event-is-finished-in-flask-on-server-side#comment52434617_32275299)也是對於類似的問題很有幫助 – colidyre 2015-09-18 14:04:38

回答

3

嗯,這取決於你的應用程序的體系結構。

讓我告訴你一個例子(見本代碼在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") 

瓶問了一個新的消息,Redis的(鎖定操作)穩步增長,但是當瓶看到的是流終止(StopIteration,如果你對Python來說並不陌生),它會返回。

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

什麼是'i_should_close_the_connection'?你能解釋一下嗎? – hllau 2012-11-02 10:58:36

+0

這是一個布爾值。你可以像Python那樣使用'if'語句。 – gioi 2012-11-02 13:21:47

+0

給我一些代碼,我很樂意提供幫助。 – gioi 2012-11-02 13:26:04