2012-11-18 49 views
1

因此,爲了知道是否仍然存在活動的數據連接,我每隔5分鐘發送一次ping,並等待服務器響應。所以基本上,我使用iq id作爲此ping方法的一個關鍵。我將發送一個ping,並存儲iq id,然後我會假設noDataConnection = true。現在,如果我收到一個具有相同iq id的pong,我認爲連接還活着,所以我將設置noDataConnection = false。但是,如果沒有數據連接,我會繼續發送ping設置noDataConnection = true,並且永遠不會收到任何數據連接,否則它將保持爲真,除非它恢復並獲得數據連接。xmpp - ping pong

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

摘錄: PING:

<iq from='[email protected]/balcony' to='capulet.lit' id='c2s1' type='get'> 
    <ping xmlns='urn:xmpp:ping'/> 
</iq> 

PONG:

<iq from='capulet.lit' to='[email protected]/balcony' id='c2s1' type='result'/> 

我這個唯一關心的是什麼,如果我收到的智商是不是我的ping的結果,我的應用程序會假設noDataConnection = true,因爲它收到的iq id與我發送的ping iq id不匹配。有沒有辦法知道我收到的iq是否是我的ping結果?

謝謝。

+0

不確定我是否可以關注你:如果'iq result'類型與'get'類型具有相同的'id',那麼你已經收到了一個pong。其他'iq結果'類型應該帶有不同的'id'。 – Flow

回答

0

我的解決方案是將我用文本「ping」發送的iq ID作爲前綴,所以基本上如果我收到一個帶有「ping」的iq前綴,那麼它就是我的ping的pong。