13

以下はnode.jsを使用して答えを与えています。

サーバー上の「サーバー送信イベント」接続を閉じる方法は?

ただし、Python Flaskで同じことを行う方法は?

4

3 に答える 3

5

まあ、それはあなたのアプリのアーキテクチャに依存します。

例を示しましょう ( 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 がストリーミングが終了したことを確認すると ( StopIterationPython に慣れていない場合は )、返されます。

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")
于 2012-10-31T19:06:27.070 に答える