Smackを使用して小さなXMPPクライアント/ボットを構築すると、かなり奇妙な動作が発生します。私はConnectionListenerとChatManagerListenerだけでなく、接続を設定します。これは非常にうまく動作し、私はポータブルデバイス上で動作している私のアプリケーションとチャットすることができます。Smack Client - 接続は中止されましたが、ユーザーはまだ「オンライン」です
接続が切断されたときの動作をテストするには、ポータブルデバイスのイーサネットケーブルを差し込みました。私はXMPPクライアントが接続を失うことを期待し、ユーザーはユーザーの仲間の名簿に「オフライン」に設定されるでしょう。何が起こるかは、このユーザーがまだ「オンライン」として表示されていて、connectionClosedかreconnectionFailedかどうかにかかわらず、クライアントのConnectionListenerは何も起動しません。
その後、イーサネットケーブルを差し込むと、接続が常に生きているように見えることがあります。オフラインメッセージが処理され、前と同じように再びチャットできます。 私のクライアントが完全にアクセスできない、順序が狂っている他の時間は、すべてのリスナーがなくなったように思えます...しかし、哀愁は投げられません。
接続が確立された後にクライアントが再起動することが確実でないため、クライアント全体が使用できなくなることは、非常に奇妙で制御できない動作です。
他の誰かがこのような問題を経験したことがありますか、起こっていないことについてのヒントはありますか?
必要に応じて私のコードを提供することができますが、実際には&のペーストをSmackのドキュメントからコピーしています。
感謝を行っている、彼らは私を助けるかもしれない実現する必要があります、あなたの接続を終了する
disconnect()
メソッドを使用しています。多分、私はもっと忍耐強くなり、ケーブルを再び差し込む前に1〜2分以上待つことになるでしょう。いずれにしても、時にはチューニングされていることがあり、時としてそうではないリスナーの問題は、まだまだ謎です。しかし私はそれについて別の質問をするつもりだと思う。 – signpainter私は、TCPのこの動作はバグではなく、ほんの一部の人が感謝するような素晴らしい機能だと付け加えたいと思います。再接続する必要はありません。非常に高価なXMPPストリームのセットアップは、多くのラウンドトリップを節約します。 OSが接続の喪失と再開についてあなたに伝えて、接続が生き残っているかどうかを確認できるようにしてください。もしそうなら、まったく何も起こらないかのように走り、そうでなければ再接続します。 XEP-0198再接続も素晴らしいです。 – Zash