XMPP - 框架

XMPP 與其他的應(yīng)用層協(xié)議(如SMTP)有著相似之處。在這些架構(gòu)中,具有惟一名稱的客戶機(jī)通過相關(guān)的服務(wù)器與另外一個(gè)具有惟一名稱的客戶機(jī)進(jìn)行通信。每個(gè)客戶機(jī)執(zhí)行客戶機(jī)的協(xié)議表單,而服務(wù)器在表單中提供路由功能。
圖 1 說明了這個(gè)簡單的架構(gòu)。
在這個(gè)例子中,每個(gè)客戶機(jī)都是同一個(gè)域名(discovery.nasa.guv)的一部分。
圖 1. 由一個(gè)服務(wù)器和兩個(gè)客戶機(jī)組成的簡單的 XMPP 架構(gòu)由一個(gè)服務(wù)器和兩個(gè)客戶機(jī)組成的簡單 XMPP 架構(gòu)的圖表服務(wù)器還可以針對不同域之間(例如,在 discovery.nasa.guv 和 europa.nasa.guv 之間)的路由進(jìn)行通信。此外,網(wǎng)關(guān)可用于在外部消息傳遞域和協(xié)議之間進(jìn)行轉(zhuǎn)換。


圖 2 中的示例顯示了一個(gè) XMPP 網(wǎng)絡(luò),網(wǎng)關(guān)通往一個(gè)短信服務(wù)(SMS)域和一個(gè) SMTP 域。在這種情況下,網(wǎng)關(guān)大多數(shù)都是被用來在 IM 協(xié)議(例如,在 XMPP 和 Internet 中繼聊天(IRC))之間進(jìn)行轉(zhuǎn)換。作為一個(gè)可擴(kuò)展的協(xié)議,XMPP 對于在不同的端點(diǎn)協(xié)議間提供統(tǒng)一連接性來說是一個(gè)理想的中樞協(xié)議。XMPP 網(wǎng)關(guān)允許終止一個(gè)給定的客戶端到服務(wù)器的會話,并且向目標(biāo)端點(diǎn)協(xié)議發(fā)起一個(gè)新的會話(同時(shí)進(jìn)行必要的協(xié)議轉(zhuǎn)換)。
圖 2. 包含了 XMPP 網(wǎng)關(guān)的更為復(fù)雜的 XMPP 架構(gòu)更為復(fù)雜的 XMPP 架構(gòu)圖,包含了連接到 SMS 和 SMTP 客戶端和服務(wù)器的 XMPP 網(wǎng)關(guān)回頁首XMPP 中的地址XMPP 中的地址(即 Jabber ID[JID])與標(biāo)準(zhǔn)電子郵件地址相似,但有著幾個(gè)顯著的差別。JID 包含一個(gè)可選節(jié)點(diǎn)、一個(gè)域和一個(gè)可選資源:[ node "@" ] domain [ "/" resource ]最常見的用法就是定義一個(gè) IM 用戶(類似電子郵件地址),比如 DavidBowman@discovery.nasa.guv。用戶能夠多次登錄 XMPP 服務(wù)器,而在這個(gè)例子中,資源能夠表示位置。例如,示例用戶可能有一個(gè)主終端(DavidBowman@discovery.nasa.guv/terminal)JID 和另外一個(gè)來自 EVA pod(DavidBowman@discovery.nasa.guv/eva_pod1)的 JID。因此,能夠找到某個(gè)特定位置,或離開此位置并找到用戶,不管用戶在哪個(gè)位置登錄。回頁首XMPP 協(xié)議XMPP 是一個(gè)相對簡單的協(xié)議,它通過 XML 消息出現(xiàn)在 TCP 套接字上。異步通信發(fā)生在 XML 流中,并帶有 XML 節(jié)(stanza)。XML 流 是封裝了兩個(gè)實(shí)體間的 XML 信息交換的容器。XML 流傳遞 XML 節(jié),這些 XML 節(jié)是一些分散的信息單元。例如,在 XMPP 中使用 XML 節(jié)傳遞消息(IM 用戶間的文本)以及到場信息。為說明這些概念,請看一個(gè)在兩個(gè)客戶端之間使用 XMPP 進(jìn)行 IM 通信的簡單示例。

圖 3 演示了兩個(gè)實(shí)體之間的簡單會話。注意,至少有一個(gè)服務(wù)器會出現(xiàn)在會話中(在這個(gè)例子中,因?yàn)閮蓚€(gè)客戶端存在于同一個(gè)域中,所以準(zhǔn)確地說,只有一個(gè)服務(wù)器)。在 圖 3 中,左邊的客戶端是發(fā)起實(shí)體(發(fā)起兩個(gè)實(shí)體間的 XMPP 通信)。XML 流使用 to 屬性來識別接收域(以及定義 XML 名稱空間)。右邊的接收客戶端 接收 XML 流并使用 XML 流響應(yīng)(在這個(gè)例子中,使用 from 屬性)進(jìn)行回應(yīng)。在這個(gè)階段,可以進(jìn)行幾個(gè)不同的協(xié)商(如驗(yàn)證和加密)。請忽略這部分討論(例外情況是當(dāng) IM 客戶端出現(xiàn)在不同的域中進(jìn)行服務(wù)器到服務(wù)器通信)。(請查看 圖 3 的文字版本。)圖 3. 示例(簡化的)XMPP 通信示例(簡化的)XMPP 通信圖圖 3 中的 XML 流的下一步是進(jìn)行消息傳遞。這個(gè)通信在消息節(jié)中進(jìn)行,并且包括了源和目標(biāo) XMPP 地址(from 和 to)、使用的語言以及節(jié)正文中的消息。對方用其自己的消息進(jìn)行響應(yīng),關(guān)鍵區(qū)別是源和目標(biāo) XMPP 地址。最后,發(fā)出流關(guān)閉消息(在連接的兩端進(jìn)行)以關(guān)閉 XML 流。任何一邊都可能返回一個(gè)錯(cuò)誤,如下面所定義。


在本例中,對方發(fā)送了一個(gè)無效的 XML 流和節(jié)。盡管這個(gè)示例展示了簡單的 IM 通信,但很容易就能了解消息節(jié)是如何轉(zhuǎn)換成 RPC 消息的,同時(shí)負(fù)載了來自對等協(xié)商的安全問題。您可以把函數(shù)注冊為節(jié)點(diǎn),以創(chuàng)建一個(gè)動態(tài)的 Web 服務(wù)框架,而不是對域中的用戶進(jìn)行注冊。
文/YZhi(簡書作者)原文鏈接:http://www.lxweimin.com/p/af87ff15bfe3著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標(biāo)注“簡書作者”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,510評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內(nèi)容