下面給出了使用node.js的答案。如何關閉Flask中的Server-Send Events連接?
How to close a "Server-Sent Events"-connection on the server?
但是,如何做到在python瓶同樣的事情?
下面給出了使用node.js的答案。如何關閉Flask中的Server-Send Events連接?
How to close a "Server-Sent Events"-connection on the server?
但是,如何做到在python瓶同樣的事情?
嗯,這取決於你的應用程序的體系結構。
讓我告訴你一個例子(見本代碼在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")
看來Flask的作者還沒有計劃支持。對於「服務器發送的事件」,最好使用像NodeJS這樣的事件驅動架構。 – hllau 2012-08-14 04:45:30
[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