【发布时间】:2020-03-05 08:19:58
【问题描述】:
我有一个订阅网络套接字的应用程序,并且不时从它那里接收一些信息。在某些情况下,我的应用程序可能会在相对较长的时间内没有收到任何东西。在那种情况下,我可能会怀疑 web-socket 已经“死”了。但是,也可能是 web-socket 没有任何东西要发送,我只需要等待更长时间。
因此,在这种情况下,我不想猜测延迟的原因是什么。我只想“主动”询问网络套接字是否还活着。我了解到可以使用“ping”来完成,但我不确定它是如何工作的。
例如,我可以执行以下操作:
pong_waiter = await ws.ping()
但是我应该如何处理这个对象?我想当网络套接字还活着时我需要看到一个“pong”字符串,但我在哪里可以看到它?返回这个字符串是什么?
添加
如果我执行:
pong_waiter = await ws.ping()
await pong_waiter
我什么也没得到。之后我也执行:
pong_waiter.result()
它也不返回任何内容。但我知道 web-socket 是活跃的(我仍在从中获取信息)。
添加了 2 个
如果我执行:
pong_waiter
我明白了:
<Future finished result=None>
那么,“pong”在哪里?
【问题讨论】:
-
不确定我是否理解您的要求。没有发送文字乒乓球。一个 pong 消息只是一个操作码为
0xA的控制帧,可以选择后跟一个有效负载。 -
您的
pong_waiterFuture成功完成这一事实表明您已收到一个pong 控制帧以响应您的ping 控制帧。