Я создаю сервер веб-сокетов, где вы должны иметь возможность подключаться к нескольким клиентам. Когда клиент подключается, он получит некоторую информацию один раз, а когда получит, он продолжит прослушивать данные, переданные в эфир. Сервер сможет одновременно «транслировать» данные всем клиентам, но не может понять, как постоянно обновлять данные при прослушивании новых подключенных клиентов.
Я пытался использовать задачу создания в asynchio. и используя бесконечный цикл while. Все отлично работает, когда первый клиент пытается подключиться. Но проблема возникает, когда второй клиент пытается подключиться, или первый обновляет соединение. Он застрял в цикле while и прекратил прослушивание новых соединений
Также пытался использовать многопоточность в обработчике результатов.
import asyncio
import websockets
async def connect(websocket, path):
# Sendt only once
await websocket.send(some_json_data))
async def report(websocket, path):
# Should be sendt continously to all connected clients
while True:
await websocket.send(braodcast_data)
async def task_handler(websocket, path):
await self.connect(websocket, path)
await self.report(websocket, path)
start_server = websockets.serve(task_handler, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Как уже было сказано, я понимаю, что это застрянетв цикле while, но я не могу найти другого решения проблемы.