2015-12-30 92 views
3

我正在構建一個簡單的網絡工具,使用經緯度Strophe.js來處理pubsub消息。我可以創建節點,訂閱,看到表格...但是當我發佈(與服務器的確定響應)郵件從未轉發到訂閱客戶端xmpp pubsub不傳遞消息

我使用ejabberd服務器與碼頭rroemhild/docker-ejabberd它有BOSH,pubsub,管理...似乎很完整。我也嘗試過與標準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

現在的問題是,儘管一切似乎要被罰款,我不能看到來自服務器的任何消息,以訂閱的客戶機的發佈 - 訂閱節點......我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> 

存在必須是正值。