通过XMPP实现XML-RPC
我目前正试图通过XMPP实现XMLRPC。我使用Smack作为客户端库,Vysper作为XMPP服务器。简化后,我的设置如下所示: [client1]-[server]-[client2] 我想从客户端1调用客户端2上的方法。我使用类型set、from和to元素以及[1]中描述的查询内容创建了一个IQ。简化示例:通过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
<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目前以自己的名义分配资源名称,而不是使用客户机建议的(),因此这涉及到一些进一步的解决方法),但现在基础工作已经开始了:)关于资源选择的提示:不要依赖它,因为它总是由服务器决定。你可能应该用“在场”来研究发现。