#python #websocket #fastapi
Вопрос:
может ли кто-нибудь помочь мне получить онлайн-пользователей с помощью Websockets в FastAPI? Я попытался использовать широковещательную передачу, но не смог получить желаемый результат. Кто-нибудь может мне в этом помочь? Вот мой код:
class ConnectionManager:
def __init__(self):
self.active_connections: List[Dict[str, WebSocket]] = []
async def connect(self, user: str, websocket: WebSocket):
await websocket.accept()
self.active_connections.append({'user': user, 'ws': websocket})
def disconnect(self, user: str, websocket: WebSocket):
self.active_connections.remove({'user': user, 'ws': websocket})
@staticmethod
async def send_personal_message(message: dict, websocket: WebSocket):
# Send personal message
await websocket.send_json(message)
async def send_other_message(self, message: dict, user: str):
# Send personal message
for connection in self.active_connections:
if connection["user"] == user:
await connection['ws'].send_json(message)
async def broadcast(self, data: dict):
# Broadcast message
for connection in self.active_connections:
await connection['ws'].send_json(data)
manager = ConnectionManager()
# region Chat
@router.websocket("/ws/{user}")
async def websocket_endpoint(websocket: WebSocket, user: str):
await manager.connect(user, websocket)
await manager.broadcast({"user": user, "message": ""})
try:
while True:
data = await websocket.receive_json()
send_user = data.get("send_user")
if send_user:
# await manager.send_personal_message(data, websocket)
await manager.send_other_message(data, send_user)
else:
await manager.broadcast({"user": user, "message": ""})
except WebSocketDisconnect:
manager.disconnect(user, websocket)
await manager.broadcast({"user": user, "message": ""})
Когда приложение чата открыто, я вижу себя онлайн-пользователем, но я не вижу никого другого, хотя я пытался открыть много вкладок, я просто вижу себя онлайн. Мы будем очень признательны за любую помощь. Заранее спасибо!