Today we are going to learn how we can quickly and easily generate a websocket with FastAPI.

Step 1: Environment Setup, if you already have FastAPI installed, you can skip these steps.
Make sure you have Python installed on your system. Then, install FastAPI and Uvicorn using pip:
pip install fastapi uvicorn
Step 2: Create a FastAPI Project
Create a new directory for your project and inside it, create a file named main.py
.
mkdir fastapi_websocket cd fastapi_websocket touch main.py
Step 3: Configure FastAPI Server with WebSocket
Open the main.py
file in your favorite text editor and implement the following code:
from fastapi import FastAPI, WebSocket app = FastAPI() class ConnectionManager: def __init__(self): self.connections = {} async def connect(self, websocket: WebSocket, client_id: int): await websocket.accept() self.connections[client_id] = websocket def disconnect(self, client_id: int): del self.connections[client_id] async def send_message(self, message: str, client_id: int): await self.connections[client_id].send_text(message) manager = ConnectionManager() @app.websocket("/ws/{client_id}") async def websocket_endpoint(websocket: WebSocket, client_id: int): await manager.connect(websocket, client_id) try: while True: data = await websocket.receive_text() await manager.send_message(f"Message received: {data}", client_id) except Exception as e: print(f"Error: {e}") finally: manager.disconnect(client_id)
This code sets up a WebSocket in FastAPI with an endpoint /ws/{client_id}
. The ConnectionManager
class manages connections and sends messages to clients.
Step 4: Run the FastAPI Server
Open your terminal and run the following command to start the FastAPI server:
uvicorn main:app --reload
This will start the server at http://127.0.0.1:8000
.
Step 5: Test the WebSocket with FastAPI on a Domain
You can use this website if your server is online: https://piehost.com/websocket-tester
Enter the URL of your websocket server: wss://yourdomain.com/ws/1
And you’ll receive the following:

