消息推送服務:XMPP

是什么

XMPP(Extensible Messaging and Presence Protocol),可擴展實時通訊協(xié)議。

XMPP是為了解決不同的IM之間不能互相通訊的問題而產(chǎn)生的。

運作方式

假設羅密歐(romeo@montague.net)與朱麗葉(juliet@capulet.com)通訊,他們的賬號分別位于服務器A和B。如果沒有XMPP協(xié)議,他們的通訊將非常困難甚至不可能。當雙方的服務器支持XMPP協(xié)議后,這件事情就變的非常簡單:

  1. 羅密歐發(fā)送消息至服務器A。
  2. 服務器A將消息發(fā)送至服務器B。
  3. 服務器B將消息發(fā)送給朱麗葉。

羅密歐與朱麗葉兩人的XMPP服務是由兩家不同的業(yè)者所提供的,而他們傳遞信息時,不須擁有對方服務器的賬號。

對話例子

傳輸?shù)牡湫偷?a target="_blank" rel="nofollow">代碼片段

不僅僅是IM

XMPP還可以應用在多人游戲、在線協(xié)作平臺、監(jiān)控報警等。

和websocket、comet有啥不同?

BOFC2.png

有大量的擴展、開源工具和解決方案。

構建web IM

使用strophe.js:


/**
* 連接綁定方法
*/
function onConnect( status ) {
    switch( status ) {
        case Strophe.Status.ERROR:
            //error
            break;

        // ... other case 

        case Strophe.Status.CONNECTED:
            //success
            conn.addHandler( onReceivedMessage,  null, 'message', null, null, null );
            conn.send( $pres.tree() );
            break;
    }

}

/**
 * 收到消息時
 */
function onReceivedMessage( msg ) {
    var from = msg.getAttribute( 'from' ),
        to   = msg.getAttribute( 'to' ),
        type = msg.getAttribute( 'type' ),
        body = msg.getElementsByTagName( 'body' );

    if( type === 'chat' ){
        body = body[ 0 ];
        
        //render to view
    }

}

/**
 * 發(fā)送消息
 */
function onSendMessage( toId, fromId, msg ) {
    var reply = $msg({to: toId, from:fromId , type:'chat'}).cnode(Strophe.xmlElement('body', '' ,msg));  
    conn.send(reply.tree());  

    //render to view
}

var conn = new Strophe.Connection( 'BOSH_SERVICE' ); 
conn.connect( 'name', 'pw',  onConnect );

$( '#logout' ).on( 'click', function(){
    conn.disconnect();
} );

$( '#send' ).on( 'click', function() {
    onSendMessage( '$toId', '$fromId', '$msg' );
} );

淘寶的應用

拍賣

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容