打開即時通信服務器openfire的大門

一、什麼是即時通信

你如今最經常使用的軟件是什麼,若是我沒有猜錯,應該是QQ和微信,是的,他們就是即時通信軟件。linux

一個可讓你無時無刻,只要有網絡就可以溝通的工具,就是即時通信工具。那麼本教程,咱們主要以openfire爲基礎來說解即時通信服務器和客戶端的實現。windows

毫無疑問,爲了更深刻的理解openfire,咱們也會深刻openfire源碼,儘量多的瞭解它的美麗細節。服務器

2 即時通信的核心概念

那麼要實現相似QQ這樣一個即時通信系統,主要會涉及哪些方面呢?Jack老師來詳細爲你白話一下。微信

(1)、須要有服務器

首先,須要有服務器程序,服務器程序負責用戶的登陸、消息之間的轉發、離線消息的存儲等。網絡

例如,柳巖發了一條消息給黃曉明(哇塞,好像他們沒有半毛錢關係哈)。柳巖那條消息會經過服務器,告知黃曉明。根據不一樣的業務邏輯,黃曉明能夠在不一樣時間收到該條消息,例如黃曉明和baby在一塊兒,如今沒有在線,那麼這條消息會存入離線。若是黃曉明在線,那麼服務器會馬上將消息發送給黃曉明。併發

話說,黃曉明的婚禮也太他媽貴了,Jack老師想有一天也有那麼多錢,你想嗎?想就,好好學習。工具

 

(2)、須要有客戶端

這個很簡單,沒有相似QQ、微信這樣的客戶端,怎麼發送消息給服務器呢。因此,即時通信也須要有客戶端。本教程,咱們也會使用strophe庫,給講解客戶端的實現,其餘庫實現客戶端的原理同樣。性能

(3)、客戶端和服務器之間須要一種通信協議。

服務器和客戶端須要共同制定一種規則,例如「to:xiaoming」,表示發送消息給xiaoming,這種規則就叫作通信協議。學習

QQ、微信都有本身的通信協議,一個協議的制定要考慮不少因素,因此本身制定一種協議,會花費不少的時間,咱們本套課程,使用的是已經有10幾年歷史的xmpp協議,xmpp協議是一種規範的協議,你能夠在這裏看到整個協議的文檔http://xmpp.org/。優化

xmpp.org協議網站

三、溝通離不開協議 XMPP協議介紹

咱們能夠在官網(xmpp.org)看到xmpp協議,這個是xmpp基金會的網站,您能夠從這裏看到xmpp協議和xmpp的擴展。

總之,目前爲止,您只須要知道xmpp是一種即便通信協議就能夠了,支持文本、視頻、文件等的傳輸。

同時,這種協議很成熟,不少大公司都在使用,例如google。

四、xmpp協議例子

Xmpp協議是創建在xml的基礎上的,因此,看起來,xmpp協議就像一個xml。

例以下面的xmpp協議,它其實就是一個xml文本。

<message from="11@myopenfire.com" to="22@myopenfire.com">
xxx</message>

 

五、通信服務器應該有的功能。

即時通信服務器應該有不少功能,咱們這裏總結以下:

一、私聊功能:就是用戶之間進行私聊的功能。

二、組聊天功能:在一個組的用戶可以進行彼此的功能,而且高效的聊天。

三、文件傳輸:如今的聊天工具都有文件傳輸功能吧。文件傳輸其實有離線傳輸,還有在線傳輸,用過qq的同窗,天然知道他們是什麼意思。

四、語音視頻聊天:這個功能開發較爲複雜,可是手機和電腦上的使用率都很高,因此服務器應該支持。

五、用戶的在線與離線狀態:服務器應該有維護用戶在線與理想的狀態。

六、註冊功能:最好服務器應該有註冊的功能。雖然QQ都是在網頁端註冊的,走的是http協議,可是一個即時通信服務器有註冊功能,能夠是一個加分項目。不知道你理解這句話的意思沒?老師耐心的給你講一下,就是註冊都是用xmpp協議來完成。

七、能夠支持表情、圖片傳輸:這個應該是標配吧。

八、服務器應該支持心跳包:心跳包能夠保證在網絡很差的狀況下,客戶端與服務器保持一個比較穩定的鏈接。

 

 

六、經常使用的XMPP服務器比較(橫測)

下面是一些經常使用的xmpp服務器,每一個服務器都有優勢,可是咱們強烈建議你使用openfire,在咱們的實踐中,openfire通過集羣和優化,可以支撐上億的客戶端鏈接,若是捨得花錢買更多的服務器,那麼能夠擴充到更多。對於目前的狀況來講,任何一個大中小型企業選擇openfire,都是足夠的了,由於短期內,絕對不可能超過上億的鏈接,幾10、上百萬就不錯了。

下圖是各個xmpp協議服務器的比較:

名字 平臺 開源協議 Jack老師備註
openfire linux、windows、mac Apache,很開放的一種協議 openfire性能較高,單臺可以達到30w以上的併發量。集羣后,能夠無限擴展。代碼結構設計很合理,插件式開發,擴展能力強。這也是《openfire教程網》講解的服務器,這個服務器明白了,那麼其餘服務器的原理大同小異。
ejabberrd linux、windows、mac
GPL2協議 它有普通版和商業版,區別是商業版性能更高。可是要使用Erlang語言開發。訪問本站的大多數同窗應該都沒有Erlang經驗,若是選擇學習這個服務器,對你們理解原理沒有幫助。
jabberd 2.x linux、windows GPL2協議 使用C開發,效率高,可是目前沒有openfire、ejarbberrd維護好。且C語言開發難度大。
Tigase linux、mac、windows AGPL協議 天生爲集羣設計,併發性很是高,每秒能夠處理50w條消息,簡單的集羣就能夠上千萬人在線,可是學習難大。
相關文章
相關標籤/搜索