XMPP Pubsub节点发现,找不到项

时间:2014-11-08 17:26:11

标签: xmpp openfire strophe

我尝试使用在xmpp服务器上存储持久性公共数据。理想情况下,用户可以在服务器上存储节点,然后稍后检索该特定节点。这都是在openfire服务器上实现的,使用strophe作为前端。

当我创建节点时,我使用这样的东西:

$iq({
 type: 'set',
 to: 'pubsub.ubuntu',
 id: 'pubsubecreatenode1'
}).c('pubsub', {xmlns: Strophe.NS.PUBSUB})
.c('create', {
 node: "princely_musings"; 
});

返回带有创建节点的结果节,除非我已经创建了节点,在这种情况下它会返回:

<iq id="pubsubecreatenode1" xmlns="jabber:client" type="error" 
    from="pubsub.ubuntu" 
    to="admin@ubuntu">
 <pubsub xmlns="http://jabber.org/protocol/pubsub">
  <create node="princely_musings"></create>
 </pubsub>
 <error code="409" type="cancel">
  <conflict xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"></conflict>
 </error>
</iq>

我也使用它发布它:

$iq({
 type: "set",
 to: 'pubsub.ubuntu',
 id: 'pub1'
}).c("pubsub", {
 xmlns: Strophe.NS.PUBSUB
}).c("publish", {
 node: "princely_musings"
}).c("item")
.c("object", {xmlns: "http://www.w3.org/2005/Atom"})
.h("somedata");

哪个会返回成功的IQ结果节。

然而,当我去发现节点时,我在请求特定节点(princely_musings)时遇到项目未找到错误,或者在未指定节点时得到空列表。

$iq({
    type: "get",
    to: 'pubsub.ubuntu',
    id: "disco1"
}).c("query", {
    xmlns: Strophe.NS.DISCO_ITEMS
}); 

,或者对于特定节点:

.c("query", {
  xmlns: Strophe.NS.DISCO_ITEMS,
  node: "princely_musings"
});

这些回报:

<iq id="disco1" xmlns="jabber:client" type="result" 
    from="pubsub.ubuntu" 
    to="admin@ubuntu">
 <query xmlns="http://jabber.org/protocol/disco#items"></query>
</iq>

<iq id="disco1" xmlns="jabber:client" type="error" 
    from="pubsub.ubuntu" 
    to="admin@ubuntu">
 <query xmlns="http://jabber.org/protocol/disco#items" 
        node="princely_musings">
 </query>
 <error code="404" type="cancel">
  <item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"></item-not-found>
 </error>
</iq>

当我尝试创建现有节点时出现的冲突错误让我相信我正确地将节点存储在服务器上,但是我无法确定为什么我的发现iq节没有找到任何东西。在这些调用中是否存在我丢失或配置错误的内容,或者是否有其他协议用于此操作?

2 个答案:

答案 0 :(得分:0)

所以我已经弄明白了。我应该一直在查看ofPubsubItem中的openfire数据库,以确定我是否真的在创建项目(我不是)。这直接是因为默认节点配置。创造智商应该看起来更像这样:

$iq({
        type: 'set',
        to: 'pubsub.ubuntu',
        from: 'create1'
    }).c('pubsub', {xmlns: Strophe.NS.PUBSUB})
.c('create', { node: 'princely_musings' }).up()
.c('configure')
.c('x', {xmlns: 'jabber:x:data', type: 'submit'})
.c('field', {'var': 'pubsub#persist_items'}).c('value').t('1').up().up()
.c('field', {'var': 'pubsub#access_model'}).c('value').t('open').up().up()
.c('field', {'var': 'pubsub#publish_model'}).c('value').t('open')

答案 1 :(得分:0)

我已经解决了这个问题,问题不在于是否存在表格中的项目&#39; ofPubsubItem&#39;

我发送&#39; iq&#39;到服务器&pubsub.myserver&#39;而不是“myserver”,这就是openfire pubsub的关键点

<iq to='pubsub.myserver'
type='set'
id='create'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<create/>
</pubsub>
</iq>
无论如何