1

我目前正在尝试通过 XMPP 实现 XML RPC。我使用 Smack 作为客户端库,使用 Vysper 作为 XMPP 服务器。简化后,我的设置如下所示:

[client1] — [server] — [client2]

我想从客户端 1 调用客户端 2 上的一个方法。我创建了一个具有类型集的 IQ,以及 [1] 中所述的 from 和 to 元素以及查询内容。简化示例:

<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] 中发现了以下声明:

服务器必须忽略名册“集”上的任何“收件人”地址,并且必须将任何名册“集”视为适用于发送者。[…]

我是否正确,在这个星座中,两个客户端之间不可能有 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 回答