РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
256 of 307 menu

Исключение WebSocketDisconnect

Исключение WebSocketDisconnect применяется для обработки ситуаций, когда WebSocket-соединение было разорвано со стороны клиента. Оно наследуется от класса Exception и возбуждается внутри WebSocket-эндпоинта при попытке чтения данных из закрытого соединения. Исключение содержит атрибут code, в котором хранится код закрытия соединения.

Для корректной обработки разрыва соединения исключение WebSocketDisconnect следует перехватывать в блоке try/except внутри обработчика WebSocket-маршрута.

Синтаксис

from fastapi import WebSocketDisconnect try: await websocket.receive_text() except WebSocketDisconnect as exc: # handle disconnection print(exc.code)

Пример

Давайте создадим WebSocket-эндпоинт, который принимает сообщения и корректно обрабатывает разрыв соединения:

from fastapi import FastAPI, WebSocket, WebSocketDisconnect app = FastAPI() @app.websocket('/ws') async def websocket_endpoint(websocket: WebSocket): await websocket.accept() try: while True: data = await websocket.receive_text() await websocket.send_text(f'echo: {data}') except WebSocketDisconnect as exc: print(f'client disconnected: {exc.code}')

При подключении клиент получает ответное сообщение с префиксом 'echo:'. При отключении в консоль сервера выводится код закрытия соединения.

Пример

Давайте перехватим исключение и отправим информацию о разрыве всем остальным клиентам:

from fastapi import FastAPI, WebSocket, WebSocketDisconnect app = FastAPI() clients = [] @app.websocket('/chat') async def chat(websocket: WebSocket): await websocket.accept() clients.append(websocket) try: while True: msg = await websocket.receive_text() for client in clients: await client.send_text(msg) except WebSocketDisconnect as exc: clients.remove(websocket) for client in clients: await client.send_text(f'user left: {exc.code}')

После отключения одного из клиентов остальные получат сообщение с кодом закрытия соединения.

Смотрите также

  • исключение WebSocketException,
    которое возбуждается для отправки ошибки клиенту
  • атрибут code,
    который хранит код закрытия WebSocket-соединения
  • атрибут reason,
    который содержит причину закрытия соединения
  • исключение WebSocketRequestValidationError,
    которое возникает при ошибке валидации WebSocket-запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить