Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过XMPP实现XML-RPC_Xmpp_Xml Rpc_Smack - Fatal编程技术网

通过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目前以自己的名义分配资源名称,而不是使用客户机建议的(),因此这涉及到一些进一步的解决方法),但现在基础工作已经开始了:)关于资源选择的提示:不要依赖它,因为它总是由服务器决定。你可能应该用“在场”来研究发现。