Я создаю простой веб-инструмент с самым строгим Strophe.js для обработки сообщений pubsub. Я могу создавать узлы, подписываться, видеть формы ... но когда я публикую (с одобренным ответом от сервера), сообщения никогда не пересылаются подписчикам-клиентам.xmpp pubsub не доставляет сообщения
Я использую сервер 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);
});
С вторым пользователя я подписаться на недавно созданный узел, и я efectively увидеть второй пользователя подписан.
$('#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='[email protected]/13675173711451438137658982' id='3:sendIQ' type='result'>
<pubsub xmlns='http://jabber.org/protocol/pubsub#owner'>
<subscriptions node='4193886472'>
<subscription jid='[email protected]' subscription='subscribed' subid='5AB6AF973AC7E'/>
</subscriptions>
</pubsub>
</iq>
</body>
И здесь успешно опубликовано сообщение
<body xmlns='http://jabber.org/protocol/httpbind'>
<iq xmlns='jabber:client' from='pubsub.example.com' to='[email protected]/13675173711451438137658982' id='5:sendIQ' type='result'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<publish node='4193886472'>
<item id='5AB6AFAB19CFD'/>
</publish>
</pubsub>
</iq>
</body>