Basic WebSocket Setup
from nexios import NexiosApp
app = NexiosApp()
@app.ws_route("/ws")
async def ws_handler(ws):
await ws.accept()
...Websocket routing follows the same pattern as other http routes making it easy to use.
WebSocket Lifecycle
- Connection: Client initiates WebSocket connection
- Acceptance: Server accepts the connection
- Communication: Bidirectional message exchange
- Disconnection: Connection closes (graceful or abrupt)
- Cleanup: Resources are cleaned up
Websocket also pocessed a WebsocketRoutes class for more complex routing needs
You can use it like this
from nexios import NexiosApp
app = NexiosApp()
async def ws_handler(ws):
await ws.accept()
...
app.add_ws_route(WebsocketRoutes("/ws", ws_handler))Websocket Router
The WSRouter operate similar to the Router but for websockets
from nexios.routing import WSRouter
router = WSRouter()
router.add_ws_route("/ws", ws_handler)
app.mount_ws_router(router, "/ws")💡Tip
You can also pass a list of WebsocketRoutes to the WSRouter constructor similar to Router
from nexios.routing import WSRouter
router = WSRouter([
WebsocketRoutes("/ws", ws_handler),
WebsocketRoutes("/ws2", ws_handler2),
])💡Tip
You can also add prefix to the WSRouter similar to Router
from nexios.routing import WSRouter
router = WSRouter(prefix="/ws")
router.add_ws_route("/ws", ws_handler)
router.add_ws_route("/ws2", ws_handler2)
app.mount_ws_router(router, "/ws-overide") #this will override /wsSending Messages
the WebSocket class has some methods that can be used to send messages to a connected client.
from nexios.websockets.base import WebSocket
async def ws_handler(ws):
await ws.accept()
await ws.send_text("Hello World")
# await ws.send_json({"message": "Hello World"})
# await ws.send_bytes(b"Hello World")Receiving Messages
The WebSocket class has some methods that can be used to receive messages from a connected client.
from nexios.websockets.base import WebSocket
async def ws_handler(ws):
await ws.accept()
message = await ws.receive_text()
# message = await ws.receive_json()
# message = await ws.receive_bytes()
print(message)Nexios supports three primary message formats:
1. Text Messages
text_data = await ws.receive_text()
await ws.send_text(f"Received: {text_data}")2. Binary Messages
binary_data = await ws.receive_bytes()
await ws.send_bytes(binary_data) # Echo binary data3. JSON Messages
json_data = await ws.receive_json()
await ws.send_json({"status": "success", "data": json_data})Connection Lifecycle
A WebSocket connection follows a clear lifecycle:
Accept the Connection
await ws.accept()Receive Messages (Loop)
while True:
data = await ws.receive()
# Process dataHandle Disconnections
from nexios.websockets.base import WebSocketDisconnect
except WebSocketDisconnect:
print("Client disconnected")Close the Connection
finally:
await ws.close()