2012-05-31 24 views
2

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

[客户端1] - [服务器] - [客户端2]

我想要调用的客户端2的方法从客户端1.我创建类型集智商,以及来自[1]中描述的元素和查询内容。简单的例子:

<iq type='set' from='[email protected]' to='[email protected]' id='1'> 
    <query xmlns='jabber:iq:rpc'> 
    <methodCall> 
     <methodName>foo</methodName> 
    </methodCall> 
    </query> 
</iq> 

的问题是,从客户端1发送的智商,当我收到回一个错误的智商,并没有被提交到客户端2。

服务器必须忽略任何“到”列入名册“设置”地址,必须把任何花名册“套”为适用于:调查这个问题,我碰到这种说法在规格[2]来了发件人。 [...]

我是否正确,在这个星座Jabber-RPC不可能在两个客户端之间?或者我对Jabber-RPC有一个基本的误解?

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

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

回答

3

它看起来像您要发送的IQ节到客户端的裸JID代替全JID的,即,代替[email protected][email protected]/resource

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

+0

谢谢@Lance,这有助于解决我的问题。我还有一些Vysper特有的问题需要解决(Vysper目前以自己的名义分配资源名称,而不是使用客户端提供的(https://issues.apache.org/jira/browse/VYSPER-297),所以这涉及到一些更进一步的解决方法),但基础知识正在工作:) – qqilihq

+1

有关资源选择的提示:不要依赖它,因为它始终是决定的服务器。您可能应该使用在线状态来查看发现。 – Zash