OpenFire 是采用Java開發(fā)的基于XMPP(Jabber)協(xié)議,開源實(shí)時(shí)協(xié)作(RTC)服務(wù)器。
Smack 是用 Java編 寫的XMPP客戶端代碼庫,是 spark 的核心
開源界總是有許多有趣的東東,這三個(gè)合起來就是一個(gè)完整的XMPP IM 實(shí)現(xiàn)。
OpenFire ——服務(wù)器端
Spark——客戶端
Smack——XMPP 傳輸協(xié)議的實(shí)現(xiàn)
三者都是基于Java 語言的實(shí)現(xiàn),其中XMPP是一個(gè)協(xié)議,協(xié)議是需要實(shí)現(xiàn)的,Smack起到的就是這樣的一個(gè)作用。
OpenFire 是基于XMPP 協(xié)議的IM 的服務(wù)器端的實(shí)現(xiàn),雖然當(dāng)兩個(gè)用戶連接后,可以通過點(diǎn)對點(diǎn)的方式來發(fā)送消息,但是用戶還是需要連接到服務(wù)器來獲取一些連接信息和通信信息的,所以服務(wù)器端是必須要實(shí)現(xiàn)的。
Spark 提供了客戶端一個(gè)基本的實(shí)現(xiàn),并提出了一個(gè)很好的插件架構(gòu),這對于開發(fā)者來說不能不說是一個(gè)福音。我強(qiáng)烈建議基于插件方式來實(shí)現(xiàn)你新增加的功能,而不是去改它的源代碼,這樣有利于你項(xiàng)目架構(gòu),把原始項(xiàng)目的影響降到最低。
Smack 是一個(gè)XMPP 協(xié)議的Java 實(shí)現(xiàn),提供一套可擴(kuò)展的API,不過有些時(shí)候,你還是不得不使用自己定制發(fā)送的XML 文件內(nèi)容的方式來實(shí)現(xiàn)自己的功能
三者之間的關(guān)系:
從上圖可知,Client 端和Server端都可以通過插件的方式來進(jìn)行擴(kuò)展,Smack是二者傳遞數(shù)據(jù)的媒介。
OpenFire官方
官方介紹: http://www.igniterealtime.org/index.jsp
官方下載: http://www.igniterealtime.org/downloads/index.jsp