XMPP

XMPP（全稱：Extensible Messaging and Presence Protocol，舊名 Jabber，中文可譯為可擴充套件訊息和表示協議）是一種以 XML 為基礎的開放式即時通訊協定，是經由網際網路工程工作小組（IETF）透過的網際網路標準。

歷史

Jeremie Miller 於 1998 年開始了這個專案。第一個公開版本於 2000 年 5 月發行。這個專案的主要產品是 jabberd，XMPP 的伺服器端軟體。它既可以建立私人的 XMPP 網路，也可以加入全球的公共 XMPP 網路。XMPP 的關鍵特色是，分散式的即時通訊系統，以及使用 XML 串流。

Jabber 已經由 IETF XMPP 協議（ RFC3920）標準化。

Jabber 是一個開放原始碼形式組織產生的網路即時通訊協議。XMPP 原本是為即時通訊而量身定製，但由於 XML Stanza 本身是 XML 元素，在基於 XML 靈活發展的特性下，使得 XMPP 也可以適用其他方面，已經得到了 IETF 的批准。XMPP 與 IMPP、PRIM、SIP（SIMPLE）合稱四大 IM 協議主流，在此 4 大協議中，XMPP 是最靈活的。

2007 年，2001 年成立的 Jabber 軟體基金會更名為 XMPP 標準基金會。

特色

2.1 優點

開放

XMPP 協議是自由、開放、公開的，並且易於瞭解。而且在客戶端、伺服器、元件、原始碼庫等方面，都已經各自有多種實作。

標準

網際網路工程工作小組（IETF）已經將 Jabber 的核心 XML 串流協定以 XMPP 之名，正式列為認可的即時通訊及 Presence 技術。而 XMPP 的技術規格已被定義在 RFC 3920 及 RFC 3921。任何 IM 供應商在遵循 XMPP 協議下，都可與 Google Talk 實現連線。

證實可用

第一個 Jabber（現在 XMPP）技術是 Jeremie Miller 在 1998 年開發的，現在已經相當穩定；數以百計的開發者為 XMPP 技術而努力。今日的網際網路上有數以萬計的 XMPP 伺服器運作著，並有數以百萬計的人們使用 XMPP 即時傳訊軟體。

分散式

XMPP 網路的架構和電子郵件十分相像；XMPP 核心協議通訊方式是先建立一個 stream，XMPP 以 TCP 傳遞 XML 資料流，沒有中央主伺服器。任何人都可以執行自己的 XMPP 伺服器，使個人及組織能夠掌控他們的即時傳訊體驗。

安全

任何 XMPP 協議的伺服器可以獨立於公眾 XMPP 網路（例如在企業內部網路中），而使用 SASL 及 TLS 等技術的可靠安全性，已內建於核心 XMPP 技術規格中。

可擴充套件

XML 名稱空間的威力可使任何人在核心協定的基礎上建造客製化的功能；為了維持通透性，常見的擴充套件由 XMPP 標準基金會。

彈性佳

XMPP 除了可用在即時通訊的應用程式，還能用在網路管理、內容供稿、協同工具、檔案共享、遊戲、遠端系統監控等。

多樣性

用 XMPP 協定來建造及佈署即時應用程式及服務的公司及開放原始碼計劃分佈在各種領域；用 XMPP 技術開發軟體，資源及支援的來源是多樣的，使得使你不會陷於被「綁架」的困境。

2.2 缺點

資料負載太重：隨著通常超過 70％的 XMPP 協議的伺服器的資料流量的存在和近 60％的被重複轉發，XMPP 協議目前擁有一個大型架空中存在的資料提供給多個收件人。新的議定書正在研究，以減輕這一問題。

二進位制資料傳輸受限 : XMPP 傳輸單一的 XML 檔案，因此要透過 XMPP 傳輸二進位制資料，需先將二進位制資料以 Base64 編碼。但是大量的二進位制資料傳輸，較佳的作法是用外部的其他協定傳輸，而以 XMPP 進行溝通。至於其他二進位制資料加密會話（encrypted conversations）或圖形圖示（graphic icons）以嵌入式使用相同的方法。

運作方式

XMPP 網路是基於伺服器的（即客戶端之間彼此不直接交談），但是也是分散式的。不像 AOL 即時通或 MSN Messenger 等服務，XMPP 沒有中央官方伺服器。Jabber.org 的公眾伺服器上有大量的使用者，所以有些人誤解了，以為它是官方伺服器，不過事實上任何人都可以在自己的網域上執行 XMPP 伺服器。

Jabber 識別符（JID）是使用者登入時所使用的帳號，看起來通常像一個電子郵件地址，如 someone@example.com；前半部分為使用者名稱，後半部分為 XMPP 伺服器域名，兩個欄位以 @符號區隔。

假設朱麗葉（juliet@capulet.com）想和羅密歐（romeo@montague.net）通話，他們兩人的帳號分別在 Capulet.com 及 Montague.net 的伺服器上。當朱麗葉輸入訊息並按下傳送鈕之後，一連串的事件就發生了：

朱麗葉的 XMPP 客戶端將她的訊息傳送到 Capulet.com XMPP 伺服器。
Capulet.com XMPP 伺服器開啟與 Montague.net XMPP 伺服器的連線。
Montague.net XMPP 伺服器將訊息寄送給羅密歐。如果他目前不線上上，那麼儲存訊息以待稍後寄送。

羅密歐與朱麗葉兩人的 XMPP 服務是由兩家不同的業者所提供的，而他們彼此傳訊時，不須擁有對方伺服器的帳號，也不須成為對方業者的會員。

XMPP 協議透過 HTTP 運輸

在原來的規格，XMPP 協議可以使用 HTTP 的方式有兩種：輪詢（polling）與繫結（binding）。輪詢現在不推薦，基本上，輪詢意味著 HTTP 郵件儲存在伺服器端的資料庫上，客戶端必須一再地以 HTTP 的 GET 和 POST 的方式去抓取（以及刊出）其中的訊息。然而使用繫結的方式時，客戶端會保留一個長存的 HTTP 連線，等待一旦伺服器有新的訊息時，就立刻接收訊息。因為輪詢的結果往往是伺服端沒有新訊息，這種推送的通知模式比輪詢的方式更有效率。

由於客戶端使用 HTTP，大多數防火牆允許客戶端獲取和留言沒有任何障礙。因此，即使使用 XMPP 協議的 TCP 埠被攔截，伺服器也能正常地傾聽一般的 HTTP 埠，其上的訊息也能保持暢通。還有一些網站更允許大眾經由瀏覽器登入進 XMPP。尤有甚者，還有一些公共的伺服器同時擁有標準 HTTP（80 埠）和 HTTPS（443 埠），因此又有助於透過防火牆。

使用例項

XMPP 伺服器的高容錯性和低開銷使得許多大公司使用 XMPP 作為其基礎平臺來建立私人信使和聊天，以及提供推送通知。

WhatsApp ~8 億使用者，使用修改後的 XMPP 協議進行聊天
藝電～4000 萬用戶，使用 XMPP 進行聊天
Nintendo Switch NPNS ~3500 萬臺裝置。使用 XMPP 傳遞新聞、通知和其他訊息。
Odnoklassniki ~4200 萬用戶。 使用者之間的內部訊息傳遞透過 XMPP 客戶端提供社交網路連線。
英雄聯盟～2700 萬用戶，使用 XMPP 進行聊天
無冬 online ~1600 萬用戶，使用 XMPP 進行聊天
堡壘之夜～2.5 億使用者，使用 XMPP 進行聊天
星戰前夜～90 萬用戶，使用 XMPP 進行聊天
Google ~15 億使用者。使用 XMPP 傳遞推送通知。
蘋果公司～5 億使用者。使用 XMPP 傳遞推送通知。
美國國家安全域性～使用 XMPP 進行內部通訊。
歐洲議會～歐洲議會安全域性建議議員使用 Cisco Jabber 而不是 Signal 或 WhatsApp。

實現

7.1 XMPP 客戶端軟體

XMPP 協議是由大量的 XMPP 協議的客戶端，伺服器和程式庫。主要的文章包含了幾個 XMPP 協議清單客戶的多種平臺。

7.2 XMPP 伺服器端軟體