什么是即時(shí)通信?
- 即時(shí)通訊(Instant Messaging)是目前Internet上最為流行的通訊方式,各種各樣的即時(shí)通訊軟件也層出不窮,服務(wù)提供商也提供了越來(lái)越豐富的通訊服務(wù)功能。
即時(shí)通訊的實(shí)現(xiàn)方式?
- 即時(shí)通訊有多種實(shí)現(xiàn)方式,例如:XMPP、環(huán)信、融云等。本文則對(duì)XMPP的使用進(jìn)行介紹。
什么是XMPP?
- XMPP(XML,Messages,Presence,Protocol)是可擴(kuò)展通訊和表示協(xié)議,基于XML(可擴(kuò)展標(biāo)記語(yǔ)言),可用于即時(shí)通信(IM)。
- 目前有四種主流IM(即時(shí)通訊)協(xié)議:XMPP(可擴(kuò)展通訊和表示協(xié)議)、IMPP(即時(shí)信息和空間協(xié)議)、PPIM(空間和即時(shí)信息協(xié)議)、SIMPLE(針對(duì)即時(shí)通訊和空間平衡擴(kuò)充的進(jìn)程開(kāi)始協(xié)議)。在這四種協(xié)議中,最靈活的就是XMPP,它是基于XML協(xié)議的,繼承了在XML環(huán)境中靈活的發(fā)展性,因此,基于XMPP的應(yīng)用程序具有超強(qiáng)的可擴(kuò)展性。
XMPP優(yōu)點(diǎn):
- 開(kāi)放:XMPP協(xié)議是由JSF開(kāi)源社區(qū)組織開(kāi)發(fā)的,不屬于任何的機(jī)構(gòu)和個(gè)人,所以XMPP是自由、開(kāi)放、公開(kāi)的,而且易于了解。在客戶端、服務(wù)器、組件、源碼庫(kù)等方面,都有了多種實(shí)現(xiàn)。
- 標(biāo)準(zhǔn):互聯(lián)網(wǎng)工程工作組將XMPP于2002年正式列為認(rèn)可的實(shí)時(shí)通訊及Presence技術(shù)。
- 分布式的網(wǎng)絡(luò)架構(gòu):XMPP協(xié)議雖然是Client/Server的通訊模式,但是XMPP協(xié)議本身并沒(méi)有這樣的限制。而分布式網(wǎng)絡(luò)是由分布在不同地點(diǎn)且具有多個(gè)終端的節(jié)點(diǎn)機(jī)互連而成,網(wǎng)絡(luò)中的任意一點(diǎn)均至少與兩條線路相連,當(dāng)任意一條線路發(fā)生故障,通信還可經(jīng)其他鏈路完成,具有較高的可靠性,同時(shí)網(wǎng)絡(luò)易于擴(kuò)充。XMPP網(wǎng)絡(luò)架構(gòu)和電子郵件十分相似,其核心協(xié)議通信方式是先創(chuàng)建一個(gè)Stream,然后以TCP傳遞XML數(shù)據(jù)流,沒(méi)有中央服務(wù)器,任何人都可以運(yùn)行自己的XMPP服務(wù)器,使個(gè)人或組織能夠掌握他們的實(shí)時(shí)通訊體驗(yàn)。
- 良好的擴(kuò)展性:基于XML建立起來(lái)的應(yīng)用具有良好的語(yǔ)義完整性和擴(kuò)展性。
- 應(yīng)用廣泛:XMPP除了可用在即時(shí)通信的應(yīng)用程序,還能用在網(wǎng)絡(luò)管理、內(nèi)容供稿、協(xié)同工具、檔案共享、游戲、遠(yuǎn)端系統(tǒng)監(jiān)控等。
- 安全性:XMPP在Client-to-Server通信和Server-to-Client通信中都使用TLS(Transport Layer Security)協(xié)議作為通信通道的加密方法,保證通信的安全。
XMPP實(shí)現(xiàn)即時(shí)通訊
實(shí)現(xiàn)即時(shí)通訊至少需要一個(gè)服務(wù)器端、兩個(gè)客戶端。下面我們準(zhǔn)備需要的環(huán)境:XMPP服務(wù)器、XMPP客戶端(輔助調(diào)試)
XMPP環(huán)境搭建
搭建XMPP環(huán)境需要幾個(gè)輔助工具:
- XAMPP
XAMPP(Apache+MySQL+PHP+PERL)是一個(gè)功能強(qiáng)大的XAMPP軟件站集成軟件包,是一個(gè)易于安裝且包含MySQL、PHP和Perl的Apache發(fā)行版,非常容易安裝和使用,只需下載、解壓縮、啟動(dòng)即可。

XAMPP1

XAMPP2

XAMPP3

XAMPP4

XAMPP5

XAMPP6
- Openfire
Openfire采用Java開(kāi)發(fā),開(kāi)源的實(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的安裝。

Openfire1

Openfire2

Openfire3

Openfire4

Openfire5

Openfire6

Openfire7
此時(shí)需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)以供使用:

Openfire8

Openfire9
創(chuàng)建數(shù)據(jù)庫(kù)結(jié)束,需要導(dǎo)入表,此時(shí)要去openfire文件夾中獲取需要的文件,位置如下:

Openfire10

Openfire11

Openfire12

Openfire13

Openfire14

Openfire15

Openfire16

Openfire17

Openfire18

Openfire19

Openfire20

Openfire21
XMPP客戶端環(huán)境搭建
搭建XMPP客戶端環(huán)境使用spark,輔助調(diào)試。XMPP系統(tǒng)的一個(gè)設(shè)計(jì)標(biāo)準(zhǔn)是必須支持簡(jiǎn)單的客戶端。事實(shí)上,XMPP系統(tǒng)架構(gòu)對(duì)客戶端只有很少的幾個(gè)限制。一個(gè)XMPP客戶端必須支持的功能有:
- 通過(guò)TCP套接字與XMPP服務(wù)器進(jìn)行通信
- 解析組織好的XML信息包
- 理解消息數(shù)據(jù)類型

spark1

spark2
環(huán)境配置結(jié)束。
工程中添加X(jué)MPP
- 創(chuàng)建新工程
- 導(dǎo)入XMPP框架
- 引入XMPP需要的依賴庫(kù)libxml2和libresolv
- 設(shè)置路徑/usr/include/libxml2

導(dǎo)入XMPP