4

XMPPサーバー(OpenFire)とJavaSmackXMPPスタックに基づくカスタムクライアントがあります。手動のサブスクリプション受け入れを使用しているため、クライアントはサブスクライブとサブスクライブされたプレゼンスを交換する必要があります。

RFCに記載されているように、サブスクライブプレゼンス(「プレゼンスをサブスクライブしたい」)はサーバーによって保存され、ユーザーがログインするたびに、ユーザーが応答するまで再送します。残念ながら、同じことが回答(「購読済み」または「未購読」)には当てはまらないようです。元のリクエスターがオフラインの場合、他のユーザーがサブスクリプションリクエストに応答した場合、そのリクエスターは応答を受け取りません。XMPP RFCには、サーバーの予想される動作について何も見つかりませんでした。

私に何ができる?私が見逃したかもしれない何かがありますか?または、このユースケースを実装する標準的な方法はありますか?

このOpenFireフォーラムの投稿は、私が経験している動作が望ましいものであることを示唆しています...

すべてのポインタをありがとう、フロリアン

4

2 に答える 2

1

サブスクリプションの状態を判断するには、次の2つの方法があります。

  1. 要求しているユーザーの名簿を確認してください。名簿に「to」または「both」のサブスクリプション属性を持つ問題のエンティティのアイテムが含まれている場合、サブスクライブされます。
  2. 2番目のオプションは、別のサブスクライブパケットをサーバーに送信することです。サーバーは、他のユーザーがプレゼンス要求をすでに受け入れている場合、他のユーザーに代わってサブスクライブされた状態ですぐに応答する必要があります。
于 2011-01-05T10:04:30.257 に答える
0

そのため、アリスはボブのプレゼンス情報をサブスクライブしたいと考えており、サブスクリプション要求を送信します。サーバーは、ボブが「はい」または「いいえ」で応答するまで、ボブに通知を送信します。そして今のあなたの問題は、ボブがリクエストに応答している間、サーバーがアリスにオフラインの場合は通知しないということです。したがって、アリスはボブに偶然に答えてもらうでしょう。

ボブがプレゼンス情報を交換することに同意した場合、アリスは彼女の名簿でこれに気付くでしょう-彼女はボブのプレゼンス(離れている、アイドル状態など)を見るでしょう。それ以外の場合、リクエストがまだ保留中であるかどうか、またはボブがリクエストを拒否したかどうかはわかりません。

カスタムモジュールを実装してopenfireサーバーに追加することで、この動作を変更できます。OpenfireにはこのためのAPIがあります。

このモジュールは確認メッセージに反応し、保留中または最近確認されたすべてのサブスクリプションメッセージのステータスメッセージをサブスクライバーに送信できます(ログオンごとに)。クライアントコードはこれらのメッセージを処理し、このステータスを適切な方法でサブスクライバーに提示できます。

于 2011-01-05T08:59:40.487 に答える