チャットアプリケーションを実装するためにejabberdオープンソースサーバーを使用しました。メッセージの配信と受信に成功しましたが、配信確認と読み取り確認が失われることがあります。ejabberdはオフラインチャットをスプールテーブルに保存する方法
接続クローズ・セッション・スタンザがクライアントによってejabberdサーバーに送信された場合、さらなるメッセージが確実にスプール・テーブルに保管されていることを確認してください。クライアント・ネットワークに問題があり、クライアントがサーバーにクローズ・セッション・スタンザを送信せずに切断されたというシナリオを考えてみましょう。サーバーはクライアントがまだオンラインで、スプールテーブルにメッセージを格納していないとみなします。
しかし、クライアントがオンラインになると、すべての保留中のメッセージがクライアントに送信されます(スプールに加えて、サーバーがクライアントをオンラインにしていると思われるメッセージもあります)。
ejabberdはスプールテーブルではなくオフラインメッセージをどこに保存しますか?
ストリームが予期せず閉じられ、再開されなかった(タイムアウトが発生した)場合を考えてみましょう。いつか新しい接続が行われた後、サーバーに格納されているデータをバッファリングすることがあります。クライアントに転送されるか、これを克服するためにいくつかのejabberdモジュールを実装する必要がありますか? –
ストリームの管理/ pingがメッセージの信頼性に使用されていた場合、セッションが終了すると、メッセージはオフラインストレージに保存されます。 –
ストリーム管理の再開に最適なタイムアウト値は何ですか?現在は120秒を維持していますが、一部のスタンザはクライアントで失われています。 ejabberdログでは、9つのスタンザ(例のような)がクライアントによって確認応答されなかったことが表示されます。 24 * 60 * 60に増やすべきですか? –