服務器:爲XMPP節提供路由,是否支持server-Server通信也是很重要的特性,常見的服務有openfire,tigase,m-link等web
客戶端:通常爲人類驅動的實體,也能夠是自動化的機器人實體(聊天機器人)跨域
組件:XMPP擴展(XEP-0114)使用該擴展協議能夠實現服務實現無關的擴展,組件做爲服務器內部可單獨尋址的實體瀏覽器
插件:特定服務實現下的擴展,不大可能會移植服務器
JID:格式 節點@域/資源 網絡
XMPP通信是以XML爲基礎,研究XMPP協議的話必需要了解他的一些基礎元素和屬性工具
xmpp流由兩份xml組成,通信的每一個方向都有一份,根元素爲stream:stream學習
子元素爲可路由的節點和與流相關的頂級元素,通用元素spa
presence 相關出席信息插件
message 消息server
iq 信息與查詢
之前更新數據使用定時刷新,使用AJAX改善了體驗,實質上沒有變化。咱們可使用長輪詢技術(客戶端向服務器發送Ajax請求,服務器接到請求後hold住鏈接,直到有新消息才返回響應信息並關閉鏈接,客戶端處理完響應信息後再向服務器發送新的請求,ie上用iframe,別的瀏覽器用xhr來實現)達到更實時的更新效果。XMPP中這種技術,被稱之爲BOSH,其實Comet和反向http也是相似的東西。不少xmpp服務器中內置該功能,也有單獨的BOSH鏈接管理服務BOSH幫助http客戶端創建一個新的XMPP會話,而後把XMPP節包裝到一個特殊的body元素經過http回傳,這樣一來http應用程序就能夠控制一個真正的xmpp會話,因爲長輪詢的高效率和低延遲,所以其效果和原生TCP鏈接差很少。
使用長輪詢技術須要使用js進行跨域訪問,目前咱們經過Strophe的JS類庫實現了輕鬆優雅的在http下訪問xmpp