我正在使用最新的Strophe.js构建一个简单的web工具来处理公共消息。我可以创建节点,订阅,查看表单.但是,当我发布(从服务器发出ok响应)时,消息永远不会转发给订阅的客户端。
我正在使用带有码头rroemhild/docker-ejabberd的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);
});我的完整代码应用程序是这个github回购,以防您想要播放/查看所有代码。
现在的问题是,尽管一切看起来都很好,但我看不出任何来自服务器的消息来订阅客户端到公共节点.我测试了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>发布于 2016-01-04 09:06:59
事实证明,在未显示消息存在之前,消息不会传递给已连接的用户。
<presence xmlns='jabber:client'>
<priority>1</priority>
</presence>在场必须是一种积极的价值。
https://stackoverflow.com/questions/34527337
复制相似问题