1

現在、XMPP 経由で XML RPC を実装しようとしています。クライアント ライブラリとして Smack を使用し、XMPP サーバーとして Vysper を使用しています。簡略化すると、私のセットアップは次のようになります。

[クライアント1] — [サーバー] — [クライアント2]

クライアント 1 からクライアント 2 のメソッドを呼び出したいと思います。[1] で説明されているように、タイプ セット、from 要素と to 要素、およびクエリ コンテンツを使用して IQ を作成します。簡単な例:

<iq type='set' from='client1@localhost' to='client2@localhost' id='1'>
  <query xmlns='jabber:iq:rpc'>
    <methodCall>
      <methodName>foo</methodName>
    </methodCall>
  </query>
</iq>

問題は、client1 から IQ を送信すると、エラー IQ が返され、client2 には何も送信されないことです。問題を調査したところ、仕様で次のステートメントに出くわしました [2]。

サーバーは、名簿「セット」の「宛先」アドレスを無視する必要があり、名簿「セット」を送信者に適用するものとして扱わなければなりません。[…]

このコンスタレーションでは、2 つのクライアント間で Jabber-RPC を使用できないというのは正しいですか? それとも、Jabber-RPC について根本的な誤解がありますか?

[1] http://xmpp.org/extensions/xep-0009.html

[2] http://xmpp.org/rfcs/rfc3921.html#roster

4

1 に答える 1

3

Iq スタンザを完全な JID ではなく、クライアントの裸の JID に送信しているようclient2@example.comですclient2@example.com/resource

裸の JID に送信された Iq スタンザはサーバーによって処理され、クライアントにはルーティングされません。本質的には、特定の接続されたエージェントと対話するのではなく、ユーザーのアカウントを照会しています。通常、常に受信者の完全な JID を指定する必要があります。

于 2012-05-31T23:14:21.653 に答える