切断の検出#

あなたがいるルートや 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、リクエストのストリーミングなどに同じことが適用されます