說(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)
- 數(shù)據(jù)負(fù)載過(guò)重:隨著通常超過(guò)70%的XMPP協(xié)議的服務(wù)器的數(shù)據(jù)流量的存在和近60%的被重復(fù)轉(zhuǎn)發(fā),XMPP協(xié)議目前擁有一個(gè)大型架空中存在的數(shù)據(jù)提供給多個(gè)收件人。 新的議定書正在研究,以減輕這一問題。
- 沒有二進(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)即可。
接下來(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安裝教程。
下載Mac版Openfire(下載Openfire_4_0_2) ,安裝成功時(shí)候我們可以在電腦的系統(tǒng)偏好設(shè)置里面打開這個(gè)軟件。
點(diǎn)擊打開, Status顯示Running表示服務(wù)器打開可以運(yùn)行;
點(diǎn)擊Open Admin Console 打開Openfile的控制平臺(tái)進(jìn)行相關(guān)配置選擇->簡(jiǎn)體中文點(diǎn)擊-> Continue
域名使用127.0.0.1(本機(jī)作為服務(wù)器)
Openfile需要鏈接一個(gè)數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)我們的賬號(hào)信息,以及聊天的記錄
前往文件夾:/usr/local 右擊Openfile->顯示簡(jiǎn)介,將其訪問權(quán)限改成->讀與寫;
點(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ù);
單擊執(zhí)行,導(dǎo)入成功后我們會(huì)發(fā)現(xiàn)Test_XMPP數(shù)據(jù)庫(kù)里面有34張表;
然后回到Openfile配置頁(yè)面將【host name】改為127.0.0.1,【database-name】改為Test_XMPP,之后按提示設(shè)置并填寫信息;
登錄到管理控制平臺(tái)可以查看服務(wù)器的相關(guān)信息;
-
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,我們還可以在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)行通話了,效果如下圖所示
上面是客戶端與客戶端通信,接下來(lái)通過(guò)服務(wù)器給所有在線客戶打招呼!
客戶端接收到的消息。
好了,Openfire服務(wù)器的搭建及客戶端環(huán)境的搭建就告一段落了,相信看到這里,你已經(jīng)對(duì)基于XMPP的即時(shí)通信有了大概的了解,在下一篇中將實(shí)現(xiàn)在iOS工程中加入XMPP實(shí)現(xiàn)登入、注冊(cè)、聊天,有興趣的話可以去看看。
總結(jié)
- 基于XMPP的8大特性(開放、標(biāo)準(zhǔn)、證實(shí)可用、分散、安全、可擴(kuò)展、彈性佳、多樣性),被開發(fā)出基于XMPP的軟件越來(lái)越多;
- 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)