此篇文章為《開發(fā)你自己的XMPP IM》的轉發(fā),原文章地址:http://phoenixtoday.blogbus.com/logs/17246727.html
最近沒在Blog 上露臉,為撒類?應師兄的請求,幫他研究一個XMPP IM 軟件的開發(fā)。反正最近也沒什么大事,每天都想寫寫代碼練練手,就幫忙唄。研究了一通覺得還挺有趣,自己這幾天查國內外的資料,發(fā)現國內關于這方面間的軟件 資料太少了,就想在這里寫幾篇關于此類IM 軟件開發(fā)的文章。不過別看東西小,涉及的模塊可不少。
所以我基本上分為三篇文章來介紹此類軟件的開發(fā):
第一篇是關于XMPP 協議是啥,IM 是啥以及一個比較有名的開源實現,該開源實現包括三個部分(Spark、Smack和Openfire);
第二篇講如何開發(fā)基于Spark 的客戶端IM 插件部分;
第三篇講如何開發(fā)基于Openfire 服務器端的插件部分。
好了,進入正題吧。
?
什么是XMPP?
Extensible Messaging and Presence Protocol,簡單的來講,它就是一個發(fā)送接收處理消息的協議,但是這個協議發(fā)送的消息,既不是二進制的東東也不是字符串,而是XML。正是因為使用 了XML作為消息傳遞的中介,Extensible 才談的上,不是么?嘿嘿。再詳盡的東西,我也就不多介紹了,大家可以去百度百科里查看下,鏈接在這里
什么是IM ?
Instant Messenger,及時通信軟件,就是大家使用的QQ、MSN Messenger和Gtalk等等。其中Gtalk 就是基于XMPP 協議的一個實現,其他的則不是。當前IM 幾乎作為每個上網者必然使用的工具,在國外的大型企業(yè)中有一些企業(yè)級的IM應用,但是其商業(yè)價值還沒完全發(fā)揮出來。設想既然XMPP 協議是一個公開的協議,那么每個企業(yè)都可以利用它來開發(fā)適合本身企業(yè)工作,提高自身生產效率的IM;甚至,你還可以在網絡游戲中集成這種通信軟件,不但讓你 可以邊游戲邊聊天,也可以開發(fā)出適合游戲本身的IM 應用,比如說一些游戲關鍵場景提醒功能,團隊語音交流等等都可以基于IM來實現。說了這么多,就是一個意思,其商業(yè)價值遠遠比你想的高!
Spark Smack 和 Openfire
開源界總是有許多有趣的東東,這三個合起來就是一個完整的XMPP IM 實現。包括服務器端——Openfire,客戶端——Spark,XMPP 傳輸協議的實現——Smack(記住,XMPP是一個協議,協議是需要實現的,Smack起到的就是這樣的一個作用)。三者都是基于Java 語言的實現,因此對于熟悉Java 的開發(fā)者來說不是很難
Spark 提供了客戶端一個基本的實現,并提出了一個很好的插件架構,這對于開發(fā)者來說不能不說是一個福音。我強烈建議基于插件方式來實現你新增加的功能,而不是去 改它的源代碼,這樣有利于你項目架構,把原始項目的影響降到最低,文章以后的部分也是基于這種插件體系進行開發(fā)的
Openfire 是基于XMPP 協議的IM 的服務器端的一個實現,雖然當兩個用戶連接后,可以通過點對點的方式來發(fā)送消息,但是用戶還是需要連接到服務器來獲取一些連接信息和通信信息的,所以服務 器端是必須要實現的。Openfire 也提供了一些基本功能,但真的很基本的!慶幸的是,它也提供插件的擴展,像Spark 一樣,我同樣強烈建議使用插件擴展的方式來增加新的功能,而不是修改人家的源代碼。
Smack 是一個XMPP 協議的Java 實現,提供一套可擴展的API,不過有些時候,你還是不得不使用自己定制發(fā)送的XML 文件內容的方式來實現自己的功能
下圖展示了三者之間的關系:

從圖上可以了解到,client 端和server端都可以通過插件的方式來進行擴展,smack是二者傳遞數據的媒介。
嗯,今天就寫到這里吧,畫圖花了好久的時間呀。下一篇介紹一下如何開發(fā)基于Spark 的插件程序,并總結一些我自己的一些心得,舉一個實際的例子,需要涉及到的一些XML 文件的解析與生成,還有Spark、Smack 自己提供的API ,還有ant 的一些基本知識.