2015-12-30 3 views
3

Я создаю простой веб-инструмент с самым строгим 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> 

ответ

1

Оказывается, что сообщения не доставляются подключенным пользователем до тех пор, пока не показал его присутствие.

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

Присутствие должно быть положительным.

Смежные вопросы