1

因此,为了知道是否仍有活动的数据连接,我每隔 5 分钟发送一次 ping,并等待服务器响应。所以基本上,我使用 iq id 作为这个 ping 方法的关键。我将发送一个 ping,并存储 iq id,假设 noDataConnection = true。现在,如果我收到一个具有相同 iq id 的 pong,我假设连接是活动的,所以我将设置 noDataConnection = false。但是,如果没有数据连接,我将继续发送设置 noDataConnection = true 的 ping,并且永远不会收到任何数据,因此除非它恢复并获得数据连接,否则它将保持为真。

摘自http://xmpp.org/extensions/xep-0199.html#s2c:PING:

<iq from='juliet@capulet.lit/balcony' to='capulet.lit' id='c2s1' type='get'>
  <ping xmlns='urn:xmpp:ping'/>
</iq>

乒乓:

<iq from='capulet.lit' to='juliet@capulet.lit/balcony' id='c2s1' type='result'/>

我对此唯一担心的是,如果我收到的 iq 不是我的 ping 的结果,并且我的应用程序将假定 noDataConnection = true,因为它收到的 iq id 与我的 ping iq id 不匹配已发送。有没有办法知道我收到的 iq 是否是我 ping 的结果?

谢谢。

4

1 回答 1

0

我的解决方案是在我发送的 iq id 前面加上一个文本“ping”,所以基本上如果我收到一个带有“ping”的 iq 前缀,那么它就是我的 ping 的 pong。

于 2013-01-17T09:58:11.760 回答