Подключите несколько клиентов к серверу веб-сокетов, передавая данные - PullRequest
0 голосов
/ 29 сентября 2019

Я создаю сервер веб-сокетов, где вы должны иметь возможность подключаться к нескольким клиентам. Когда клиент подключается, он получит некоторую информацию один раз, а когда получит, он продолжит прослушивать данные, переданные в эфир. Сервер сможет одновременно «транслировать» данные всем клиентам, но не может понять, как постоянно обновлять данные при прослушивании новых подключенных клиентов.

Я пытался использовать задачу создания в 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, но я не могу найти другого решения проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...