#python-3.x #websocket #python-asyncio
#python-3.x #websocket #python-asyncio
Вопрос:
У меня есть async
метод, который я пытаюсь использовать для возврата данных из интерфейса веб-сокета приложения NodeJS.
Когда метод выполняется, я просто получаю <Future pending>
сообщение внутри объекта websockets.
Что мне нужно изменить, чтобы метод получал и печатал фактическое сообщение с сервера?
import asyncio
import json
import asyncws
import websockets
import requests
...
...
...
async def inject():
ws = await asyncws.connect(url get_sid())
print("Sending...")
payload = base_query f"(SELECT substring((SELECT token FROM AuthTokens WHERE UserId = 1),1,1))=3 #"
payload = string_to_json(payload, token)
payload = f'42["checkEmail", {payload}]'
ws.send(payload)
print("Sent...")
print("Receiving...")
reply = ws.recv()
if reply is None:
print("NoneType reply")
else:
print(reply)
for r in reply:
print(r)
asyncio.get_event_loop().run_until_complete(inject())
asyncio.get_event_loop().close()
Вывод:
Sending...
Sent...
Receiving...
<generator object Websocket.recv at 0x7fbb1813eb30>
<Future pending>
Комментарии:
1. Вам нужно поставить
await
перед обоимиws.send
ws.recv
вызовами and .
Ответ №1:
Websockets использует Python asyncio
для управления параллелизмом и вводом-выводом.
websocket.send
И websocket.recv
являются асинхронными функциями. Это означает, что вам нужно await
использовать их, чтобы получить значение.
В вашем коде вам нужно изменить ws.send(payload)
на await ws.send(payload)
и ws.recv()
на await ws.recv()
.
Вы можете прочитать документацию для Websockets здесь: https://websockets.readthedocs.io/en/stable/api.html#websockets.protocol .websocketcommon protocol.recv