通过XMPP实现XML-RPC

通过XMPP实现XML-RPC,xmpp,xml-rpc,smack,Xmpp,Xml Rpc,Smack,我目前正试图通过XMPP实现XMLRPC。我使用Smack作为客户端库,Vysper作为XMPP服务器。简化后,我的设置如下所示: [client1]-[server]-[client2] 我想从客户端1调用客户端2上的方法。我使用类型set、from和to元素以及[1]中描述的查询内容创建了一个IQ。简化示例: <iq type='set' from='client1@localhost' to='client2@localhost' id='1'> <query xml

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

[client1]-[server]-[client2]

我想从客户端1调用客户端2上的方法。我使用类型set、from和to元素以及[1]中描述的查询内容创建了一个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]中发现了这一说法:

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

我说的对吗,在这个星座中,两个客户机之间不可能有叽叽喳喳的RPC?还是我对Jabber RPC有一个根本性的误解

[1]


[2]

看起来您正在将Iq节发送到客户的裸JID,而不是完整的JID,即
client2@example.com
而不是
client2@example.com/资源


发送到裸JID的Iq节由服务器处理,不会路由到客户端。实际上,您是在查询用户的帐户,而不是与特定的连接代理进行交互。通常,您总是希望指定收件人的完整JID。

谢谢@Lance,这有助于解决我的问题。我还有一些Vysper特有的问题需要解决(Vysper目前以自己的名义分配资源名称,而不是使用客户机建议的(),因此这涉及到一些进一步的解决方法),但现在基础工作已经开始了:)关于资源选择的提示:不要依赖它,因为它总是由服务器决定。你可能应该用“在场”来研究发现。