Skip to content

Commit 36dcf82

Browse files
First Commit
0 parents  commit 36dcf82

3 files changed

Lines changed: 55 additions & 0 deletions

File tree

Procfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
web: uvicorn server:app --host 0.0.0.0 --port $PORT

requirements.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
fastapi
2+
uvicorn
3+
websockets

server.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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)

0 commit comments

Comments
 (0)