4

ストリーミング応答の送信に関する Heroku のドキュメントには、次のように記載されています。

「サーバー送信イベントなどでストリーミング応答を送信する場合は、クライアントがハングアップしたことを検出し、アプリ サーバーがすぐに接続を閉じるようにする必要があります。」

django-sseを使用して、Django で Server-Sent Events を使用して Heroku を実験してきました。永遠にループする反復子を使用し、Redis pub/sub チャネルからメッセージを読み取り、クライアントに送信します。

def iterator(self):
    connection = _connect()
    pubsub = connection.pubsub()
    pubsub.subscribe(self.get_redis_channel())

    for message in pubsub.listen():
        if message['type'] == 'message':
            event, data = json.loads(message['data'])
            self.sse.add_message(event, data)
            yield

問題は、クライアントが切断された場合にこのループから抜け出し、Redis への接続を閉じることができるようにすることです。クライアントがいつ切断されたかを検出するにはどうすればよいですか?

4

1 に答える 1

2

Heroku の Scala Play2 アプリケーションでも同様の問題があり、close()、refresh、またはウィンドウを閉じるときに SSE 接続がクライアントによって閉じられたときに検出されませんでした。新しいHeroku Labs websockets 機能を有効にすると、これが修正されました。

アップデート:

Heroku のサポートに問い合わせて、自分の経験を話しました。これが彼らの返事でした。

こんにちはロイド、

これは既知の問題であり、新しい WebSocket エンドポイントが問題を解決することは間違いありません。既存のエンドポイントの問題に対処する予定はありませんが、最終的には WebSocket エンドポイントをより多くのユーザーに公開する予定です。

一番、

ジェイク

于 2013-11-07T02:05:38.040 に答える