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 并将数据发送到所有使用单次发射进入房间的客户端。
我的系统有一个 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 并将数据发送到所有使用单次发射进入房间的客户端。