以下はnode.jsを使用して答えを与えています。
ただし、Python Flaskで同じことを行う方法は?
まあ、それはあなたのアプリのアーキテクチャに依存します。
例を示しましょう ( 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 は Redis (ロック操作) に新しいメッセージを着実に要求しますが、Flask がストリーミングが終了したことを確認すると ( 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")