Я застрял на этом некоторое время, надеюсь, кто-нибудь сможет пролить свет!
Я хочу установить соединение через веб-сокет между 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
из внешней функции.
Действительно не уверен, как обойти это.