openfire web client 開發系列(3) -- XMPP名詞解釋

openfire web client 開發系列(3) -- XMPP名詞解釋

一、XML stream>XML stanza。

由stream內包含不同作用的stanzas區塊,不同區塊標籤,有不同功能作用。

image

 

在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。

常見樣子如下

image

 

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埠,與伺服器連線。

image

 

如果要讓web版的client與伺服器溝通,也就是要透過http協定與XMPP伺服器連線,就必須開啟XMPP over BOSH功能。以openfire伺服器為例:

image

啟用重開之後,可以用瀏覽器試試。

image

但實際在撰寫web client時,網址後面需附加”http-bind”。因此實際上會像這樣子 http://server:7070/http-bind/

 

 

四、Strophe.js

開放源碼的javascript程式庫。可以讓javascript開發者,以化簡為繁的方式,與XMPP伺服器溝通,實現撰寫web client願望,同時也提供整合通訊功能於自家網站的機會。

http://strophe.im/

使用方式同jQuery一樣,於html內引入即可。

image

 

strophe還有一個迷人之處--plugin。允許其他人藉由plugin的開發,擴展strophe功能。

使用方法就是接著strophe.js後面引入即可。

image