2016-08-17 74 views
3

我使用strophe.js JavaScript客戶端庫,用於連接到使用下面的代碼XMPP服務器的Openfire)。在線和離線用戶使用strophe.js實時

var BOSH_SERVICE = 'http://127.0.0.1:7070/http-bind/'; 
connection = new Strophe.Connection(BOSH_SERVICE); 

    connection.connect("jid", 
        "password", 
        onConnect); 

和回調函數(爲onConnect)如下:

function onConnect(status) 
{ 
    if (status == Strophe.Status.CONNECTING) { 
    log('Strophe is connecting.'); 
    } else if (status == Strophe.Status.CONNFAIL) { 
    log('Strophe failed to connect.'); 
    $('#connect').get(0).value = 'connect'; 
    } else if (status == Strophe.Status.DISCONNECTING) { 
    log('Strophe is disconnecting.'); 
    } else if (status == Strophe.Status.DISCONNECTED) { 
    log('Strophe is disconnected.'); 
    $('#connect').get(0).value = 'connect'; 
    } else if (status == Strophe.Status.CONNECTED) { 
    log('Strophe is connected.'); 
    log('ECHOBOT: Send a message to ' + connection.jid + 
     ' to talk to me.'); 

    connection.addHandler(onMessage, null, 'message', null, null, null); 
    connection.send($pres().tree()); 
    console.log($pres().tree()); 

    } 
} 

我使用這個代碼和沒有問題,直到這成功連接到服務器。

問題:在實時狀態更新用戶列表。

讓我解釋一下我的問題:

我想顯示在線和離線用戶提供實時更新的列表(類似於顯示聊天應用的東西。)

前。假設有3個用戶A,B和C,並且都在線(已登錄)

現在假設用戶A斷開連接或脫機,那麼用戶B,C如何獲得用戶A的狀態通知?並在用戶B和C列表中將用戶A的狀態更改爲脫機而不刷新。

是存在strophe.js任何方法,它會自動調用時,有一個人得到連接或DIS-連接。或者我需要寫我自己的?

我不能肯定,但也有一些是有名冊。

回答

5

您可以訂閱存在使用該API的strophe您的好友:

connection.send($pres({ 
    to: jid,  // buddy jid 
    type: "subscribe" 
})); 

它實現了XMPP規範(見https://xmpp.org/rfcs/rfc3921.html#int瞭解詳細信息)。 好友可以接受申購與回覆:

connection.send($pres({ 
    to: from, // jid of subscriber 
    type: "subscribed" 
})); 

您可以在Plunker檢查(使用Strophe.js)基於XMPP我的Web客戶端例如:

http://plnkr.co/edit/EhQHDsYpDhrECmaaIlZO

+0

感謝您的答覆。我只需添加訂閱插件即可開啓並設置自動訂閱者。現在它的工作正常...你的答案也是我想知道的。謝謝哥們。 –

+0

是否有可能使用strophe.js或其他任何使用openfire的lib創建視頻聊天? –

+0

我只能建議你檢查的WebRTC功能,允許網頁瀏覽器做實時音頻/同行之間的視頻通信 – beaver