是什么
XMPP(Extensible Messaging and Presence Protocol),可擴展實時通訊協議柜蜈。
XMPP是為了解決不同的IM之間不能互相通訊的問題而產生的仗谆。
運作方式
假設羅密歐(romeo@montague.net)與朱麗葉(juliet@capulet.com)通訊指巡,他們的賬號分別位于服務器A和B。如果沒有XMPP協議隶垮,他們的通訊將非常困難甚至不可能藻雪。當雙方的服務器支持XMPP協議后,這件事情就變的非常簡單:
- 羅密歐發(fā)送消息至服務器A狸吞。
- 服務器A將消息發(fā)送至服務器B勉耀。
- 服務器B將消息發(fā)送給朱麗葉。
羅密歐與朱麗葉兩人的XMPP服務是由兩家不同的業(yè)者所提供的蹋偏,而他們傳遞信息時便斥,不須擁有對方服務器的賬號。
對話例子
傳輸的典型的代碼片段
不僅僅是IM
XMPP還可以應用在多人游戲威始、在線協作平臺枢纠、監(jiān)控報警等。
和websocket字逗、comet有啥不同京郑?
有大量的擴展、開源工具和解決方案葫掉。
構建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' );
} );