切断の検出#
あなたがいるルートや web ソケットハンドラー(またはその中で呼び出されるコード)で待機中でクライアントが切断すると、待機は CancelledError を発生させます。これを使用してクライアントが切断したときに検出し、クリーンアップを実行できます。たとえば、broadcast_tutorial の sse ハンドラーはこれを使用して切断時にクライアントを削除します
@app.route('/sse')
async def sse():
queue = asyncio.Queue()
app.clients.add(queue)
async def send_events():
while True:
try:
data = await queue.get()
event = ServerSentEvent(data)
yield event.encode()
except asyncio.CancelledError:
app.clients.remove(queue)
または関連部分のみで
@app.route('/sse')
async def sse():
try:
await ...
except asyncio.CancelledError:
# Has disconnected
WebSocket、リクエストのストリーミングなどに同じことが適用されます