2012-05-31 54 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