File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ web : uvicorn server:app --host 0.0.0.0 --port $PORT
Original file line number Diff line number Diff line change 1+ fastapi
2+ uvicorn
3+ websockets
Original file line number Diff line number Diff line change 1+ from fastapi import FastAPI , WebSocket , WebSocketDisconnect
2+ from typing import List
3+ import uvicorn
4+ import json
5+
6+ app = FastAPI ()
7+
8+
9+ class ConnectionManager :
10+
11+ def __init__ (self ):
12+ self .active_connections : List [WebSocket ] = []
13+
14+ async def connect (self , websocket : WebSocket ):
15+ await websocket .accept ()
16+ self .active_connections .append (websocket )
17+
18+ def disconnect (self , websocket : WebSocket ):
19+ self .active_connections .remove (websocket )
20+
21+ async def broadcast (self , message : str ):
22+
23+ for connection in self .active_connections :
24+ await connection .send_text (message )
25+
26+
27+ manager = ConnectionManager ()
28+
29+
30+ @app .websocket ("/chat" )
31+ async def websocket_endpoint (websocket : WebSocket ):
32+
33+ await manager .connect (websocket )
34+
35+ try :
36+
37+ while True :
38+
39+ data = await websocket .receive_text ()
40+
41+ message = json .loads (data )
42+
43+ await manager .broadcast (json .dumps (message ))
44+
45+ except WebSocketDisconnect :
46+
47+ manager .disconnect (websocket )
48+
49+
50+ if __name__ == "__main__" :
51+ uvicorn .run (app , host = "0.0.0.0" , port = 8000 )
You can’t perform that action at this time.
0 commit comments