Я хочу разработать средство наблюдения за веб-сокетами на python таким образом, чтобы при отправке sth он должен был ждать получения ответа (что-то вроде блокировки программирования сокетов). Я знаю, что это странно, в основном я хочу сделать инструмент командной строки Python 3.6, который может обмениваться данными с сервером, сохраняя то же самое подключение к сети для всех команд, поступающих от пользователя.
Я вижу, что приведенный ниже фрагмент довольно типичен для Python 3.6.
import asyncio
import websockets
import json
import traceback
async def call_api(msg):
async with websockets.connect('wss://echo.websocket.org') as websocket:
await websocket.send(msg)
while websocket.open:
response = await websocket.recv()
return (response)
print(asyncio.get_event_loop().run_until_complete(call_api("test 1")))
print(asyncio.get_event_loop().run_until_complete(call_api("test 2")))
но это создаст новое соединение ws для каждой команды, которая побеждает цель. Можно сказать, что вы должны использовать асинхронный обработчик, но я не знаю, как синхронизировать ответ ws с пользовательским вводом из командной строки.
Я думаю, что если бы я мог заставить асинхронную сопрограмму (call_api) работать как генератор, где вместо оператора return вместо оператора return есть оператор yield, то я, вероятно, мог бы сделать что-то вроде beow:
async def call_api(msg):
async with websockets.connect('wss://echo.websocket.org') as websocket:
await websocket.send(msg)
while websocket.open:
response = await websocket.recv()
msg = yield (response)
generator = call_api("cmd1")
cmd = input(">>>")
while cmd != 'exit'
result = next(generator.send(cmd))
print(result)
cmd = input(">>>")
Пожалуйста, дайте мне знать ваши ценные комментарии.
Спасибо