websocket 客户端和服务器之间的数据交换

Data exchange between websocket clients and server

我的系统有一个 fastAPI 服务器、一个在 Raspberry 上实现的 python 客户端和用于用户界面的 Javascript 客户端。数据从 python 客户端发送到服务器,然后转发到 Js 客户端,反之亦然。我在服务器和每种类型的客户端之间建立了连接,但是当从客户端发送到服务器时,它只是发送回该客户端,其余的什么也没有收到。处理这个问题的正确方法是什么?希望得到您的帮助。谢谢。

websocket 的问题是它不支持广播。 您可以将连接的客户端列表存储在某处并遍历它们以发送消息

CLIENTS = set()
async def broadcast():
    while True:
        await asyncio.gather(
            *[ws.send("woof") for ws in CLIENTS],
            return_exceptions=False,
        )
        await asyncio.sleep(2)

asyncio.create_task(broadcast())

async def handler(websocket, path):
    CLIENTS.add(websocket)
    try:
        async for msg in websocket:
            pass
    finally:
        CLIENTS.remove(websocket)

start_server = websockets.serve(handler, ...)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

您可以阅读更多信息here

但是我的建议是使用 socket.io. With it you can create rooms 并将数据发送到所有使用单次发射进入房间的客户端。