openfire web client 開發系列(3) -- XMPP名詞解釋
一、XML stream>XML stanza。
由stream內包含不同作用的stanzas區塊,不同區塊標籤,有不同功能作用。
在XMPP的世界中,透過傳送與接收不同的XMPP stanzas,達成各種不同任務。
而<presence />、<message />、<iq />為最重要的標籤元素。
以上圖為例,t002用戶,建立了一個XMPP stream,送出<stream:stream>標籤做為開啟。
第一個傳送的標籤<iq>,要求t002的roster(聯絡人或中文翻為好友清單)。
接著傳送<presence>,告知伺服器他目前是online,且是avaiable。
接著傳送<message>,給t004送了一封短訊。
然後再以<presence>,知會伺服器,t002已經unavaiable。
最後以<stream:stream>結束關閉這段通信。
不同XMPP stanzas大致上會有一些共通屬性元素。
from:訊息發送來源
to:訊息發送目標
type:在不同stanzas中,會有不同值。
<presence />值定義在 http://xmpp.org/rfcs/rfc3921.html 的 2.2.1 有詳細值列表定義。
<message />值定義在 http://xmpp.org/rfcs/rfc3921.html 的 2.1.1 有詳細值列表定義。
<iq />在 http://xmpp.org/rfcs/rfc6120.html#stanzas-semantics-iq 8.2.3 有詳細值列表定義。
但三者都有一個共通值error,但通常只用於回覆的stanzas,我方不主動設定此值,作為傳遞類型。
id:<presence />、<message />、<iq />都有這個屬性,但通常多見於<iq />,因為對於<iq />而言,它是必要屬性。而其他為非必要屬性。其最大用處在於,辨識傳送接收雙方stanza的對應,以免答非所問。
二、XMPP的識別位址寫法
簡稱JID(Jabber Identifier)。
由三個主要元素構成。local part、domain、resource。
常見樣子如下
local part說白一點就是帳戶名稱。domain跟AD Domain意義不大一樣,大部分時候反而比較接近FQDN的意思,在JID中大部分指的是伺服器名稱,有時我們也會寫成短名稱如of3.mt.com.tw就只寫 of3。
在JID中的resource部分,大部分時候它代表XMPP Client端連線的識別,每個連線的client會賦予唯一的resource作為識別。但在某些場合,會賦予別的作用,例如在一個多人聊天室內,用來識別在聊天室中的特定使用者,因為local part變成聊天室識別名稱。
三、XMPP Over BOSH
BOSH全名Bidirectional-streams Over Synchronous HTTP。
client端正常情況以5222埠,與伺服器連線。
如果要讓web版的client與伺服器溝通,也就是要透過http協定與XMPP伺服器連線,就必須開啟XMPP over BOSH功能。以openfire伺服器為例:
啟用重開之後,可以用瀏覽器試試。
但實際在撰寫web client時,網址後面需附加”http-bind”。因此實際上會像這樣子 http://server:7070/http-bind/
四、Strophe.js
開放源碼的javascript程式庫。可以讓javascript開發者,以化簡為繁的方式,與XMPP伺服器溝通,實現撰寫web client願望,同時也提供整合通訊功能於自家網站的機會。
使用方式同jQuery一樣,於html內引入即可。
strophe還有一個迷人之處--plugin。允許其他人藉由plugin的開發,擴展strophe功能。
使用方法就是接著strophe.js後面引入即可。