【发布时间】:2017-03-19 05:10:34
【问题描述】:
我有这段代码,我想连接到 websocket 并通过发送心跳来保持连接处于活动状态。在执行此操作时,我还希望能够将有效负载发送到 websocket,但是我一直卡在等待我的 keepAlive 协程的结果
import asyncio
import websockets
ws=#path goes here
async def sendHeartbeat(socket):
message={
"op": 1,
"d": 0
}
await socket.send(json.dumps(message))
print("heartbeat sent")
async def keepAlive(socket):
while 1==1:
await sendHeartbeat(socket)
resp=await(socket.recv())
print(resp)
if json.loads(resp)["op"]==11:
#the server sent an ack back
print("ack received")
else:
socket.close()
await asyncio.sleep(10)
async def beginSocket(loop):
async with websockets.connect(ws) as socket:
print(await socket.recv())
await keepAlive(socket)
#payloads would be sent here
print("Hey payloads being sent and stuff")
loop = asyncio.get_event_loop()
loop.run_until_complete(beginSocket(loop))
然而,使用这段代码,等待keepAlive 之后的打印语句永远不会被打印。我怎样才能使代码不等待keepAlive的结果?
【问题讨论】:
-
我的建议是理解并执行此处的示例:docs.python.org/3/library/asyncio-task.html,然后再尝试更复杂的操作。换句话说,从 Hello World 开始。 :) 祝你好运!
标签: python python-3.x python-asyncio python-3.6