Невозможно управлять подключением нескольких пользователей к веб-сокету в fastapi ⇐ Python
Невозможно управлять подключением нескольких пользователей к веб-сокету в fastapi
Я хочу хранить пользовательские соединения websocket и управлять ими в словаре, чтобы я мог создавать собственные события для каждого пользователя.
вот очень простая реализация того, чего я пытаюсь достичь:
из fastapi импортировать FastAPI, WebSocket приложение = ФастAPI() кон = {} @app.websocket("/ws/{id}") асинхронное определение websocket_endpoint (websocket: WebSocket, id: str): пытаться: печать("подключиться", идентификатор) ожидайте websocket.accept() con[id] = веб-сокет print("проверка", con.keys()) для uid в кон: печать (UID) ожидайте con[uid].send_text("привет") кроме исключения как e: распечатать(е) и вот журнал:
ИНФОРМАЦИЯ: Uvicorn работает по адресу http://127.0.0.1:8000 (нажмите CTRL+C, чтобы выйти) ИНФОРМАЦИЯ: Запущен процесс перезагрузки [26605] с использованием StatReload. ИНФОРМАЦИЯ: Запущен серверный процесс [26610] ИНФОРМАЦИЯ: Ожидание запуска приложения. ИНФОРМАЦИЯ: Запуск приложения завершен. подключить 1 ИНФОРМАЦИЯ: ('127.0.0.1', 48346) - "WebSocket /ws/1" [принято] проверьте dict_keys(['1']) 1 ИНФО: соединение открыто подключить 2 ИНФОРМАЦИЯ: ('127.0.0.1', 48354) - "WebSocket /ws/2" [принято] проверьте dict_keys(['1', '2']) 1 Неожиданное сообщение ASGI «websocket.send» после отправки «websocket.close». ИНФО: соединение открыто Когда я подключаюсь к веб-сокету с клиентом 1, все работает как положено, и я получаю сообщение привет.
Журнал клиента 1:
ПОДКЛЮЧЕНИЕ: WS://LOCALHOST:8000/WS/1 ПОДКЛЮЧЕНИЕ ГОТОВО привет СОЕДИНЕНИЕ ЗАКРЫТО! но когда клиент Second подключается к websocket, он возвращает исключение на сервере:
Неожиданное сообщение ASGI «websocket.send» после отправки «websocket.close». и клиент 2 не получает никакого сообщения:
ПОДКЛЮЧЕНИЕ: WS://LOCALHOST:8000/WS/1 ПОДКЛЮЧЕНИЕ ГОТОВО СОЕДИНЕНИЕ ЗАКРЫТО! Я запускаю приложение следующим образом:
uvicorn main:app --reload Что я здесь делаю не так?
Я хочу хранить пользовательские соединения websocket и управлять ими в словаре, чтобы я мог создавать собственные события для каждого пользователя.
вот очень простая реализация того, чего я пытаюсь достичь:
из fastapi импортировать FastAPI, WebSocket приложение = ФастAPI() кон = {} @app.websocket("/ws/{id}") асинхронное определение websocket_endpoint (websocket: WebSocket, id: str): пытаться: печать("подключиться", идентификатор) ожидайте websocket.accept() con[id] = веб-сокет print("проверка", con.keys()) для uid в кон: печать (UID) ожидайте con[uid].send_text("привет") кроме исключения как e: распечатать(е) и вот журнал:
ИНФОРМАЦИЯ: Uvicorn работает по адресу http://127.0.0.1:8000 (нажмите CTRL+C, чтобы выйти) ИНФОРМАЦИЯ: Запущен процесс перезагрузки [26605] с использованием StatReload. ИНФОРМАЦИЯ: Запущен серверный процесс [26610] ИНФОРМАЦИЯ: Ожидание запуска приложения. ИНФОРМАЦИЯ: Запуск приложения завершен. подключить 1 ИНФОРМАЦИЯ: ('127.0.0.1', 48346) - "WebSocket /ws/1" [принято] проверьте dict_keys(['1']) 1 ИНФО: соединение открыто подключить 2 ИНФОРМАЦИЯ: ('127.0.0.1', 48354) - "WebSocket /ws/2" [принято] проверьте dict_keys(['1', '2']) 1 Неожиданное сообщение ASGI «websocket.send» после отправки «websocket.close». ИНФО: соединение открыто Когда я подключаюсь к веб-сокету с клиентом 1, все работает как положено, и я получаю сообщение привет.
Журнал клиента 1:
ПОДКЛЮЧЕНИЕ: WS://LOCALHOST:8000/WS/1 ПОДКЛЮЧЕНИЕ ГОТОВО привет СОЕДИНЕНИЕ ЗАКРЫТО! но когда клиент Second подключается к websocket, он возвращает исключение на сервере:
Неожиданное сообщение ASGI «websocket.send» после отправки «websocket.close». и клиент 2 не получает никакого сообщения:
ПОДКЛЮЧЕНИЕ: WS://LOCALHOST:8000/WS/1 ПОДКЛЮЧЕНИЕ ГОТОВО СОЕДИНЕНИЕ ЗАКРЫТО! Я запускаю приложение следующим образом:
uvicorn main:app --reload Что я здесь делаю не так?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение