2015年2月25日 星期三

xmpp學習筆記 之一

首先,要看電子書
http://professionalxmpp.com

Professional XMPP Programming with JavaScript and jQuery

然後下載source code
https://github.com/metajack/profxmpp

然後建立一個副本於我的bitbucket
https://bitbucket.org/my account/professional-xmpp_code

然後local電腦也有一個git離線庫
@mac pro 15, ~/professional-xmpp_code

然後用sourcetree這個工具負責兩邊同步

第一章主要是講 XMPP的協定

XMPP全文是extensible messaging and presence protocol
大多數社群網站如Facebook, MySpace, Twitter均使用此協定

每個用戶都有聯繫人組成的花名冊,當聯繫人上線或是離線均會自動發出通知
XMPP定義了通信實體間所使用的資料格式,XMPP使用XML格式,在XMPP中XML組成一對data stream,每個stream前後均有開始與結束字,例如

<message to='somebody1@xmppdomain2'
    from='somebody2@xmppdomain2'
    type='chat'>
<body>some messages</body>
</message>

XMPP也支援TLS (transport layer security) ,SASL (simple authentication and security layers)
實現身份驗證機制

Ejabberd, Openfire, Tigase是三種能夠於Windows, Mac OSX, Linux上使用的開源伺服器

XMPP的尋址
XMPP每個實體都有一個或多個JID,看起來就像電子郵件格式,JID有兩種格式,包含資源或不包含

XMPP的節
三種基本節分別為<presence>, <message>, <iq>
XMPP stream由兩份XML組成,通信每一方向均有一個XML,以<stream:stream>包住要傳送的資料,例如

<stream:stream>
<iq type='get'>
    <query xmlns='jabber:iq:roster'/>
</iq>

<presence/>

<message to='somebody1@xmppdomain2'
    from='somebody2@xmppdomain2'
    type='chat'>
<body>some messages</body>
</message>
<stream:stream>

<presence type='unavailable'/>
<stream:stream>

iq節中用來請求花名冊,presence用來表示目前上線,message用來發出聊天請求,另一個presence用來表示目前無法訪問

在XMPP中,出席訂閱是單向性的,如果某甲訂閱某乙的出席訂閱,可以看到某乙的上線情形,不表示同時某乙可以看到某甲的的上線情形,某乙必須自行訂閱
另外,訂閱有關的presence type有 subscribe, unsubscribe, subscribed, unsubscribed

請求使用 subscribe, 接受使用 subscribed

另外有一種定向出席,可直接發給某沒有訂閱出席的用戶,用於多人聊天很有用

message節中可附加thread用來標誌線索
多人聊天的識別字是groupchat

iq表示info/query,有兩種請求 (get, set) 和兩種響應 (result, error)

stream的建立

<?xml version='1.0'?>
<stream:stream xmlns='jabber:client'>
    xmlns:stream='http://server domain/streams'
    version='1.0'
    to='...'>

伺服器的回應

<?xml version='1.0'?>
<stream:stream xmlns='jabber:client'>
    xmlns:stream='http://server domain/streams'
    version='1.0'
    from='...'
    id='...'

>

沒有留言:

張貼留言