iOS 即時(shí)通信系列之XMPP搭建本地服務(wù)器

說(shuō)明:本文主要闡述如何使用XAMPP、Openfire工具基于XMPP搭建本地服務(wù)器、實(shí)現(xiàn)即時(shí)通信。

即時(shí)通信

  • 什么是即時(shí)通信?

即時(shí)通信(instant message,IM)是指能夠即時(shí)發(fā)送和接收互聯(lián)網(wǎng)消息等的業(yè)務(wù)。它是目前Internet上最為流行的一種通訊方式。即時(shí)通訊有多種實(shí)現(xiàn)方式,例如:XMPP、環(huán)信、融云等。本文則對(duì)XMPP的使用進(jìn)行介紹。

XMPP

  • 什么是XMPP?

XMPP(XML,Messages,Presence,Protocol)是可擴(kuò)展通訊和表示協(xié)議,基于XML(可擴(kuò)展標(biāo)記語(yǔ)言),可用于即時(shí)通信(IM)。相比其余三種IM協(xié)議(IMPP、PRIM、SIMPLE),XMPP最為靈活。它是基于XML的協(xié)議,繼承了在XML環(huán)境中靈活的發(fā)展性,所以基于XMPP的應(yīng)用具有超強(qiáng)的可擴(kuò)展性。

  • XMPP的優(yōu)點(diǎn)

1.開放:XMPP協(xié)議是自由、開放、公開的,并且易于了解。 而且在客戶端、服務(wù)器 、組件 、源碼庫(kù)等方面,都已經(jīng)各自有多種實(shí)現(xiàn)。
2.標(biāo)準(zhǔn):互聯(lián)網(wǎng)工程工作小組( IETF)已經(jīng)將Jabber的核心XML流協(xié)議以XMPP之名,正式列為認(rèn)可的實(shí)時(shí)通信及Presence技術(shù)。 而XMPP的技術(shù)規(guī)格已被定義在RFC 3920及RFC 3921。任何IM供應(yīng)商在遵循XMPP協(xié)議下,都可與Google Talk實(shí)現(xiàn)連接。
3.證實(shí)可用:第一個(gè)Jabber(現(xiàn)在XMPP)技術(shù)是Jeremie Miller在1998年開發(fā)的,現(xiàn)在已經(jīng)相??當(dāng)穩(wěn)定;數(shù)以百計(jì)的開發(fā)者為XMPP技術(shù)而努力。 今日的互聯(lián)網(wǎng)上有數(shù)以萬(wàn)計(jì)的XMPP服務(wù)器運(yùn)作著,并有數(shù)以百萬(wàn)計(jì)的人們使用XMPP實(shí)時(shí)傳訊軟件。
4.分散式:XMPP網(wǎng)絡(luò)的架構(gòu)和電子郵件十分相像;XMPP核心協(xié)議通信方式是先創(chuàng)建一個(gè)stream,XMPP以TCP傳遞XML數(shù)據(jù)流,沒有中央主服務(wù)器。 任何人都可以運(yùn)行自己的XMPP服務(wù)器,使個(gè)人及組織能夠掌控他們的實(shí)時(shí)傳訊體驗(yàn)。
5.安全:任何XMPP協(xié)議的服務(wù)器可以獨(dú)立于公眾XMPP網(wǎng)絡(luò)(例如在企業(yè)內(nèi)部網(wǎng)絡(luò)中),而使用SASL及TLS等技術(shù)的可靠安全性,已自帶于核心XMPP技術(shù)規(guī)格中。
6.可擴(kuò)展:XML 命名空間的威力可使任何人在核心協(xié)議的基礎(chǔ)上建造定制化的功能;為了維持通透性,常見的擴(kuò)展由XMPP標(biāo)準(zhǔn)基金會(huì)。
7.彈性佳:XMPP除了可用在實(shí)時(shí)通信的應(yīng)用程序,還能用在網(wǎng)絡(luò)管理、內(nèi)容供稿、協(xié)同工具、文件共享、游戲、遠(yuǎn)程系統(tǒng)監(jiān)控等。
8.多樣性:用XMPP協(xié)議來(lái)建造及布署實(shí)時(shí)應(yīng)用程序及服務(wù)的公司及開放源代碼計(jì)劃分布在各種領(lǐng)域;用XMPP技術(shù)開發(fā)軟件,資源及支持的來(lái)源是多樣的,使得使你不會(huì)陷于被“綁架”的困境。

  • XMPP的缺點(diǎn)
  1. 數(shù)據(jù)負(fù)載過(guò)重:隨著通常超過(guò)70%的XMPP協(xié)議的服務(wù)器的數(shù)據(jù)流量的存在和近60%的被重復(fù)轉(zhuǎn)發(fā),XMPP協(xié)議目前擁有一個(gè)大型架空中存在的數(shù)據(jù)提供給多個(gè)收件人。 新的議定書正在研究,以減輕這一問題。
  2. 沒有二進(jìn)制傳輸:XMPP協(xié)議的方式被編碼為一個(gè)單一的長(zhǎng)的XML文件,因此無(wú)法提供修改二進(jìn)制數(shù)據(jù)。 因此, 文件傳輸協(xié)議一樣使用外部的HTTP。 如果不可避免,XMPP協(xié)議還提供了帶編碼的文件傳輸?shù)乃袛?shù)據(jù)使用的Base64。 至于其他二進(jìn)制數(shù)據(jù)加密會(huì)話(encrypted conversations)或圖形圖標(biāo)(graphic icons)以嵌入式使用相同的方法。

XMPP實(shí)現(xiàn)即時(shí)通信

  • 條件與工具
  • 條件

實(shí)現(xiàn)即時(shí)通信至少需要一個(gè)服務(wù)器端、兩個(gè)客戶端。下面我們準(zhǔn)備需要的環(huán)境:XMPP服務(wù)器、XMPP客戶端(輔助調(diào)試)。

  • 工具

輔助工具:XAMPP、Openfire、spark、JDK(也可以去XMPP官網(wǎng)下載使用別的工具)

  • XMPP服務(wù)器搭建
  • XAMPP

XAMPP(Apache+MySQL+PHP+PERL)是一個(gè)功能強(qiáng)大的建站集成軟件包。是一個(gè)易于安裝且包含MySQL、PHP和Perl的Apache發(fā)行版,非常容易安裝和使用,只需下載(Mac版)、解壓縮、啟動(dòng)即可。

Step 1.png

Step 2.png

Step 3.png

Step 4.png

Step 5.png

Step 6.png

接下來(lái)我們先對(duì)Openfire進(jìn)行配置。

  • Openfire

Openfire采用Java開發(fā),是開源的實(shí)時(shí)協(xié)作(RTC)服務(wù)器,基于XMPP(Jabber)協(xié)議。其安裝和使用都非常簡(jiǎn)單,利用Web進(jìn)行管理。單臺(tái)服務(wù)器可支持上萬(wàn)并發(fā)用戶。因?yàn)镺penfire服務(wù)是基于JAVA語(yǔ)言寫的,所以電腦必須要有java運(yùn)行環(huán)境,需要安裝JDK成功后才能進(jìn)行Openfire的安裝。
??下載Mac版JDK(下載JDK_8u101_macosx_x64_8.0.1010.13),安裝過(guò)程就不在此累述,如果不會(huì)安裝可以點(diǎn)擊JDK安裝教程

JDK.png

下載Mac版Openfire(下載Openfire_4_0_2) ,安裝成功時(shí)候我們可以在電腦的系統(tǒng)偏好設(shè)置里面打開這個(gè)軟件。

Openfire.png
Install Success.png

點(diǎn)擊打開, Status顯示Running表示服務(wù)器打開可以運(yùn)行;

Openfire Running.png

點(diǎn)擊Open Admin Console 打開Openfile的控制平臺(tái)進(jìn)行相關(guān)配置選擇->簡(jiǎn)體中文點(diǎn)擊-> Continue

Openfire Step 1.png

域名使用127.0.0.1(本機(jī)作為服務(wù)器)

Openfire Step 2.png

Openfile需要鏈接一個(gè)數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)我們的賬號(hào)信息,以及聊天的記錄

Openfire Step 3.png

前往文件夾:/usr/local 右擊Openfile->顯示簡(jiǎn)介,將其訪問權(quán)限改成->讀與寫;

Change The Read And Write Access.png

點(diǎn)擊resource->database,可以看到database下有個(gè)openfile_mysql.sql文件,這個(gè)文件就是我們接下來(lái)要用的,粘貼到桌面以備使用;回到XAMPP中的Step 6單擊phpMyAdmin,進(jìn)入到XAMPP操作界面創(chuàng)建并導(dǎo)入數(shù)據(jù)庫(kù);

XAMPP Inport DataBase.png

單擊執(zhí)行,導(dǎo)入成功后我們會(huì)發(fā)現(xiàn)Test_XMPP數(shù)據(jù)庫(kù)里面有34張表;

XAMPP Increase In 34 Table.png

然后回到Openfile配置頁(yè)面將【host name】改為127.0.0.1,【database-name】改為Test_XMPP,之后按提示設(shè)置并填寫信息;

Setting User And Password.png
Finish Install.png

登錄到管理控制平臺(tái)可以查看服務(wù)器的相關(guān)信息;

Openfire Server.png
  • XMPP客戶端環(huán)境搭建

上面通過(guò)XAMPP和Openfire搭建了一個(gè)服務(wù)器,接下來(lái)通過(guò)spark(Mac版spark_2_7_7下載)進(jìn)行輔助調(diào)試。XMPP系統(tǒng)的一個(gè)設(shè)計(jì)標(biāo)準(zhǔn)是必須支持簡(jiǎn)單的客戶端。事實(shí)上XMPP系統(tǒng)架構(gòu)對(duì)客戶端只有很少的幾個(gè)限制,一個(gè)XMPP客戶端必須支持的功能有:
??1. 通過(guò)TCP套接字與XMPP服務(wù)器進(jìn)行通信;
??2. 解析組織好的XML信息包;
??3. 理解消息數(shù)據(jù)類型。
所以,只要客戶端滿足上述三個(gè)功能,就可以實(shí)現(xiàn)基于XMPP的即時(shí)通信。
??安裝完spark后,通過(guò)賬戶創(chuàng)建一個(gè)新的賬戶進(jìn)行登入,可以從服務(wù)器(用戶/組)看到,新創(chuàng)建的賬戶處于在線狀態(tài),而admin賬戶由于沒有登入,所以就處于離線狀態(tài)。

Spark.png
Login.png
Server.png

除了spark,我們還可以在XMPP官網(wǎng)下載Adium等客戶端軟件進(jìn)行調(diào)試,其實(shí)Mac自帶的iMessage也能調(diào)試,只要客戶端滿足之前所述XMPP客戶端所必須支持的三個(gè)功能,那么任何兩個(gè)客戶端都能夠?qū)崿F(xiàn)即時(shí)通信;接下來(lái)我們就實(shí)現(xiàn)下iMessage和spark之間進(jìn)行即時(shí)通信;
??打開iMessage->添加賬戶->其他“信息”賬戶->繼續(xù);在賬戶類型里選擇Jabber(注:XMPP前身),用戶名填寫格式為:用戶名@服務(wù)器名稱,服務(wù)器名稱可以在服務(wù)器的屬性查看,填入密碼,勾選“自動(dòng)查找服務(wù)器和端口”,點(diǎn)擊登入;登入之后我們可以添加一個(gè)在spark中登入的賬戶,添加之后就可以進(jìn)行通話了,效果如下圖所示

iMessage And spark Communication.png

上面是客戶端與客戶端通信,接下來(lái)通過(guò)服務(wù)器給所有在線客戶打招呼!

Server Send Message.png

客戶端接收到的消息。

Client Receiver Message.png

好了,Openfire服務(wù)器的搭建及客戶端環(huán)境的搭建就告一段落了,相信看到這里,你已經(jīng)對(duì)基于XMPP的即時(shí)通信有了大概的了解,在下一篇中將實(shí)現(xiàn)在iOS工程中加入XMPP實(shí)現(xiàn)登入、注冊(cè)、聊天,有興趣的話可以去看看。

總結(jié)

  1. 基于XMPP的8大特性(開放、標(biāo)準(zhǔn)、證實(shí)可用、分散、安全、可擴(kuò)展、彈性佳、多樣性),被開發(fā)出基于XMPP的軟件越來(lái)越多;
  2. XMPP客戶端需要支持的功能:
    ??1).通過(guò)TCP套接字與XMPP服務(wù)器進(jìn)行通信;
    ??2).解析組織好的XML信息包;
    ??3).理解消息數(shù)據(jù)類型。

聯(lián)系作者:簡(jiǎn)書·DH_Fantasy 新浪微博·DH_Fantasy
版權(quán)聲明:自由轉(zhuǎn)載-非商用-非衍生-保持署名(CC BY-NC-ND 3.0

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

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