gpt4 book ai didi

xmpp pubsub 不传递消息

转载 作者:行者123 更新时间:2023-12-04 22:20:11 24 4
gpt4 key购买 nike

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

我正在使用带有 docker 的 ejabberd 服务器 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>

最佳答案

事实证明,消息不会传递给连接的用户,直到它没有显示他的存在。

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

存在必须是正值。

关于xmpp pubsub 不传递消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34527337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com