xmpp pubsub不提供消息

时间:2015-12-30 10:09:59

标签: xmpp publish-subscribe strophe

我正在使用最新的Strophe.js构建一个简单的Web工具来处理pubsub消息。我可以创建节点,订阅,查看表单......但是当我发布时(从服务器获得ok响应)消息永远不会转发给订阅的客户端

我使用ejabberd服务器和docker rroemhild/docker-ejabberd它有BOSH,pubsub,admin ......并且似乎非常完整。我也尝试过使用标准的jabber ubuntu安装,结果相同。

我使用两个用户登录,在第一个我可以创建节点,请参阅订阅。

$('#create-node').bind('click', function () {
    var pub = $iq({ type: 'set', to: pubsubUrl })
        .c('pubsub', { xmlns: 'http://jabber.org/protocol/pubsub' })
        .c('create', { node: nodeName() });
    connection.sendIQ(pub, pubSuccess, pubError, 5000);
});

$('#list-subscriptions-node').bind('click', function () {
    var pub = $iq({ type: 'get', to: pubsubUrl, from: jid() })
        .c('pubsub', { xmlns: 'http://jabber.org/protocol/pubsub#owner' })
        .c('subscriptions', { node: nodeName() });
    connection.sendIQ(pub.tree(), pubSuccess, pubError, 5000);
});

使用第二个用户,我订阅了最近创建的节点,并且我有效地看到第二个用户已订阅。

$('#subscribe-node').bind('click', function () {
    var pub = $iq({ type: 'set', to: pubsubUrl })
        .c('pubsub', { xmlns: 'http://jabber.org/protocol/pubsub' })
        .c('subscribe', { node: nodeName(), jid : jid() });
    connection.sendIQ(pub, pubSuccess, pubError, 5000);
});

最后我发布了一些消息。我从服务器得到了一个OK响应。

$('#publish-node').bind('click', function () {
    var pub = $iq({ type: 'set', to: pubsubUrl, from: jid() })
        .c('pubsub', { xmlns: 'http://jabber.org/protocol/pubsub' })
        .c('publish', { node: nodeName() })
        .c('item')
        .c('x', {xmlns :'jabber:x:data', type: 'result'})
        .c('field', {var : 'title'})
        .c('value').t($('#node-event').val());
    connection.sendIQ(pub, pubSuccess, pubError, 5000);
});

我的完整代码应用为this github repo,以防您想要播放/查看所有代码。

现在问题是,尽管一切似乎都很好,我看不到服务器向订阅客户端发送任何消息到pubsub节点......我测试了MUC对话,一切都很好。 当我发布节点消息时,这些消息永远不会作为消息发送给客户端。

我已经查看了几个示例和书籍,如果我做错了什么或者它是服务器配置,我无法理解。

有什么想法吗?在服务器的某个地方,我可以查看引擎盖下的内容吗?

我服务器调用的一些示例。确认用户已订阅

<body xmlns='http://jabber.org/protocol/httpbind'>
    <iq xmlns='jabber:client' from='pubsub.example.com' to='guillem@example.com/13675173711451438137658982' id='3:sendIQ' type='result'>
        <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'>
            <subscriptions node='4193886472'>
                <subscription jid='admin@example.com' subscription='subscribed' subid='5AB6AF973AC7E'/>
            </subscriptions>
        </pubsub>
    </iq>
</body>

这是一个成功发布的消息

<body xmlns='http://jabber.org/protocol/httpbind'>
    <iq xmlns='jabber:client' from='pubsub.example.com' to='guillem@example.com/13675173711451438137658982' id='5:sendIQ' type='result'>
        <pubsub xmlns='http://jabber.org/protocol/pubsub'>
            <publish node='4193886472'>
                <item id='5AB6AFAB19CFD'/>
            </publish>
        </pubsub>
    </iq>
</body>

1 个答案:

答案 0 :(得分:1)

事实证明,在未显示消息之前,消息不会传递给已连接的用户。

<presence xmlns='jabber:client'>
    <priority>1</priority>
</presence>

存在必须是积极的价值。