Python веб-сокеты, всегда слушайте сообщения, время от времени отправляя сообщения, вызываемые другой функцией - PullRequest
0 голосов
/ 26 марта 2020

Я застрял на этом некоторое время, надеюсь, кто-нибудь сможет пролить свет!

Я хочу установить соединение через веб-сокет между JavaScript в браузере и функцией Python ( в настоящее время используется модуль websockets).

  • Функция Python всегда должна listen() для сообщений, отправляемых браузером
  • Иногда я хочу отправлять сообщения в браузер с внешнего скрипт или функцию, например, путем вызова функции speak()

Вот мой код в настоящее время:

listen

async def listen(self, websocket, path):
    while True:
        need_update = await websocket.recv()
        print(f'< {need_update}')


start_server = websockets.serve(listen(), 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

speak

async def speak(data):
    async with websockets.connect('ws://localhost:8765') as websocket:
        await websocket.send(data)
        print(f'> {data}')


asyncio.get_event_loop().run_until_complete(speak(input("? ")))

При использовании этого метода функция speak будет отправлять только сообщения функции Python listen, код JavaScript ничего не получает.

И наоборот, я могу запустить обе функции вместе с asyncio.gather(...), но тогда я не могу вызвать speak из внешней функции.

Действительно не уверен, как обойти это.

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