12

リモートサーバーで実行されているpunjabサーバーとのBOSH接続を介してXMPPチャットを使用できるようにするChrome拡張機能を実装しました。これは、javascriptStropheライブラリを使用して実装されます。私が遭遇している問題は、同じユーザーの複数のセッションがある場合(たとえば、同じマシン上の2つの異なるブラウザー)、最初のチャットウィンドウから送信したメッセージを受信して​​2番目のチャットウィンドウに記録できないことです。それを可能にする何らかのメカニズムが必要です。他のユーザーに送信したメッセージをどうにかして受信できますか?この問題は2台以上の異なるマシンでも再現できるため、これも解決する必要があります。

ありがとうございました。

4

4 に答える 4

27

JID の仕組み、優先順位、およびメッセージの送信方法を理解する必要があります。

JID の形式は次のとおりです。user@domain/resource

ログインしたユーザーの JID は一意である必要があります。通常、Web クライアントを使用する場合は、衝突が発生しないように各セッションにランダムなリソースを割り当てます。

これで、ユーザーがメッセージを送信すると、スタンザのto属性がメッセージの受信者を指定します。<message>リソースが受信者の一部である場合、その JID のみがメッセージを受信します。受信者が生の JID (user@domain) の場合、優先度が適用されます (こちらを参照)。

  1. 任意の時点で最も優先度の高いリソースが、受信メッセージを受信するリソースになります。
  2. 2 つ以上のリソースが同じ優先度を持つ場合、その優先度を持つすべてのリソースが受信メッセージを受信するか、サーバーの実装によっては、サーバー固有の基準に従って受信する可能性があります。
  3. 接続されているすべてのリソースの優先度が負の場合、いずれかのリソースの優先度が正にリセットされるまで、着信メッセージはサーバー側のキューに入れられます。

プレゼンスを送信するときに、優先度 ([-128, 127] の整数) を設定できます (完全な仕様については、 rfcを参照してください)。例:

<presence>
  <status>Learning XMPP</status>
  <priority>1</priority>
</presence>
于 2012-02-27T15:48:23.000 に答える
11

クライアントから送信されたメッセージを含め、会話全体を別のセッションに表示したい場合は、 Carbonsが探している機能です。これをProsodyのプラグインに実装しました

必要なクライアント パーツを記述するのはそれほど難しくありません。ここでは、Verse ライブラリーでそれを行います

于 2012-02-28T00:55:31.117 に答える
4

長い話を短くしましょう!

使用する:

mXmppConnection.login (USERNAME, PASSWORD, StationName/NickName);

そしてそうではありません:

mXmppConnection.login (USERNAME, PASSWORD);

resource と呼ばれる最後のパラメータで、ログイン元のステーションを表します。

そうすれば、同じユーザー名でログインできますが、それでも 2 つのデバイスからログインできます。

于 2013-07-22T23:35:51.860 に答える