我使用smack構建小型XMPP客戶端/機器人時遇到了相當奇怪的行爲。我設置了連接以及一個ConnectionListener和一個ChatManagerListener。這很好,然後我可以與我的便攜設備上運行的應用程序聊天。Smack客戶端 - 儘管連接中止,但用戶仍處於「在線」狀態
要測試丟失連接的行爲,我將便攜式設備的以太網電纜插入。我預計XMPP客戶端會失去連接,並且用戶將在用戶好友名單中設置爲「脫機」。會發生什麼呢,這個用戶仍然顯示爲'在線',並且我的客戶端的ConnectionListener不會觸發任何事情,無論是connectionClosed還是重新連接失敗或其他。
當我將以太網電纜插回去時,有時就像連接一直處於活動狀態。離線消息被處理,我可以像以前一樣再次聊天。 其他時候,我的客戶完全無法訪問,出現故障,好像所有的聽衆都不見了......但沒有發生任何異議。
這是一個非常奇怪且無法控制的行爲,會讓整個客戶端無法使用,因爲我無法確定客戶端在連接完成後會再次出現。
是否有其他人遇到過這樣的問題或有什麼提示?
如果需要,我可以提供我的代碼,但它實際上只是從Smack文檔複製粘貼&。
感謝,他們可能會幫助我。也許我會更耐心,等待1-2分多鐘才能再次接通電纜。無論如何,聽衆的問題有時候會被調整,有時甚至不會是一個謎。但我想我會爲此提出另一個問題。 – signpainter
我想補充一點,TCP的這種行爲不是一個錯誤,而是一個很少有人喜歡的強大功能。無需重新連接並執行相當昂貴的XMPP流設置,可以節省大量往返時間。 您可能需要的是操作系統告訴您連接丟失和恢復,以便您可以檢查連接是否存活。如果確實如此,就像沒有任何事情一樣運行,否則重新連接。 XEP-0198重新連接也很棒。 – Zash