A simple but yet elegant publish/subscribe socket implementation using FastAPI Websocket.
Project description
FastAPI Pub/Sub
A simple but yet elegant publish/subscribe socket implementation using FastAPI Websocket.
Installation
pip install fastapi-pubsub
How it works
FastAPI provides an awesome implementation of Websockets. But it can be painful to configure it to work as a publish/subscribe mechanism.
FastAPI Pub/Sub implemented a BasePubSubWebSocket
that handles all client's connections under the hood. All you have to do is extend this class, overriding the method generate_object_to_send(self)
with your desired logic.
from fastapi_pubsub import BasePubSubWebSocket
class SimplePubSubWebsocket(BasePubSubWebSocket):
async def generate_object_to_send(self):
# any logic that you want to implement to send to connected users
connections = self.connection_manager.get(self.websocket_id)
return {"num_connected_clients": len(connections)}
app = FastAPI()
@app.websocket("/ws/connected_clients")
async def online_players_endpoint(websocket: WebSocket):
ssw = SimplePubSubWebsocket(websocket, 'connected_clients')
await ssw.run()
BasePubSubWebSocket constructor parameters
Parameter | Mandatory | Default | Description |
---|---|---|---|
websocket | yes | - | the fastapi websocket instance |
channel_id | yes | - | a custom unique id that identifies that operation. used by connection manager to group clients connected in the same channel |
redis_credentials | no | None. if not passed, uses the dict in-memory implementation | redis host, port, username, password and db configuration |
A minimum example of a server/client communication can be seen here. Follow the instructions to see it working.
Contributing
Despite being full functional, this project is in a very early stage. Pull requests are very welcome!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for fastapi_pubsub-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a13eddc1eb7a64ccb0cbb752a4c56dd4a9e764b9c55a28edb0f2f15666171bb9 |
|
MD5 | 8848c1a5c7ce3419b1c1213edc1a386e |
|
BLAKE2b-256 | ad82b8ff5022d969d5fd7bb0f48d976d5f7b3c7f90dc39aaaa8f99d8acd55499 |