python - 为什么 python 广播器在配置 PostgreSQL 后端时收不到消息?
问题描述
我正在尝试让广播公司使用 FastAPI 和启用通知的 PostgreSQL 数据库。
这是我使用的代码
FastAPI (test_broadcaster.py)
from broadcaster import Broadcast
broadcast = Broadcast("postgres://<username>:<password>@localhost:5432/<database>")
async def broadcast_ws_receiver(websocket):
async for message in websocket.iter_text():
await broadcast.publish(channel="account", message=message)
async def broadcast_ws_sender(websocket):
async with broadcast.subscribe(channel="account") as subscriber:
async for event in subscriber:
await websocket.send_text(event.message)
FastAPI (router.py)
from fastapi.routing import APIRouter
from fastapi.websockets import WebSocket
from fastapi.concurrency import run_until_first_complete
from test_broadcaster import broadcast_ws_sender, broadcast_ws_receiver
router = APIRouter()
@router.websocket("/broadcast")
async def broadcast_ws(websocket: WebSocket):
await websocket.accept()
await run_until_first_complete(
(broadcast_ws_receiver, {"websocket": websocket}),
(broadcast_ws_sender, {"websocket": websocket}),
)
PostgreSQL (trigger name) # 上表账号
account
PostgreSQL(触发器函数)
BEGIN
PERFORM pg_notify(
'account',
json_build_object(
'operation', TG_OP,
'record', row_to_json(NEW)
)::text
);
RETURN NEW;
END;
建立 websocket 连接连接并更新表以触发通知时,没有任何反应。使用时也不行
NOTIFY account, 'hello world';
当更改为 Redis 时,它可以完美地工作,从 Redis 到 websocket,从 websocket 到 Redis。
这是一个错误吗?或者我在代码中遗漏了什么?