ストリーミング応答の送信に関する 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 への接続を閉じることができるようにすることです。クライアントがいつ切断されたかを検出するにはどうすればよいですか?