1

アプリケーションのみを使用してピア間の対話を可能にするアプリケーションを開発します。アプリ経由でログインしたユーザーと、Pidgin などの一般的なチャット クライアントでログインしたユーザーを区別したいと考えています。

観察事項があります。アプリと Pidgin の両方から同じユーザー名でログインしている場合、アプリは時々スタンザを失います。

MyName@OurServer/OurApp (OurApp はその接尾辞) など、アプリ固有の接尾辞を確認することで、アプリのユーザーの特定の jid を追跡することを既に検討し始めています。しかし、同じユーザー名がアプリと Pidgin の両方にログインしている場合、サーバーがスタンザをクライアントのみに配信するようにするにはどうすればよいでしょうか?

4

3 に答える 3

2

リソース識別子(「接尾辞」と呼ぶもの)は、アプリケーションを検出するための信頼できる方法ではありません。サーバーはそれを好きなように変更することができます。また、実際にはありそうもないことですが、ユーザーがこのリソース文字列をクライアントに入力すると、問題が発生する可能性があります。

クライアントのタイプを識別する正しい方法は、その存在を介することです。標準的な方法は、XEP-0115:エンティティ機能XEP-0030:サービスディスカバリを使用することです。クライアントは、サービス検出結果に特定の識別機能を含めます。

クライアントの完全なJIDが特定されたら、それを常に使用して通信します。<iq>要求/応答にはスタンザを使用するか<message>、カスタムペイロード(no <body>)を使用するスタンザを使用します。

于 2012-05-03T22:27:02.893 に答える
1

「接尾辞」は、XMPPではリソースと呼ばれます。XMPPパケットをベアJID(user@domian.com)またはフルJID(user@domain.com/resource)に送信できます。リソースを使用してクライアントを簡単に識別できます。また、ServiceDiscoveryを使用してクライアントソフトウェアを確認することもできます。例8を参照してください。

于 2012-05-03T21:05:22.883 に答える
1

ベース JID だけでなく、完全な JID に送信するようにしてください。

Full JID: MyName@OurServer/OurApp
Base JID: MyName@OurServer

2 番目のバージョンは、サーバーとその構成に応じて、いくつかの異なる結果になる可能性があります。完全な JID を使用すると、そのクライアント接続にのみ送信されます。

于 2012-05-03T18:24:17.457 に答える