如何实现对 ping 请求的异步发送响应,使它们不依赖于发送主请求?
从使用此 websocket 的文档中:
在下面的代码中,我尝试从控制台输入,这样当我在控制台中输入“LG”时,它就会发送身份验证请求,但服务器不允许。因为 input
阻塞操作员,我错过了 ping 请求,因此无法响应它们。我如何独立于我自己对服务器的请求并行响应它们?
import websockets
import asyncio
import json
async def main():
url = 'wss://***'
async with websockets.connect(url) as ws:
while True:
command_counter += 1
recv = await ws.recv()
response = json.loads(recv)
print(f'{command_counter} RECV: {response}')
if response['Type'] == 1:
msg = response['Msg']
data = {
"Type": 2,
"Msg": msg
}
print(f"{command_counter} SEND: {data}")
await ws.send(json.dumps(data))
command = input('>>> ')
if command == 'LG':
data = {
"RequestId": 2,
"OriginalRequestId": 2,
"RequestType": "LoginRequest",
"Message": {
"UserName": "***",
"Password": "***"
}
}
print(f"{command_counter} SEND: {data}")
await ws.send(json.dumps(data))
asyncio.get_event_loop().run_until_complete(main())
对于异步输入,使用aioconsole库。
例子:
line = await aioconsole.ainput('Ввод >>>')