轉載 開發你自己的XMPP IM 分享修改刪除

轉自:http://phoenixtoday.blogbus.com/logs/17246727.html

開發你自己的XMPP IM


最近沒在Blog 上露臉,爲撒類?應師兄的請求,幫他研究一個XMPP IM 軟件的開發。反正最近也沒什麼大事,每天都想寫寫代碼練練手,就幫忙唄。研究了一通覺得還挺有趣,自己這幾天查國內外的資料,發現國內關於這方面間的軟件 資料太少了,就想在這裏寫幾篇關於此類IM 軟件開發的文章。不過別看東西小,涉及的模塊可不少。

所以我基本上分爲三篇文章來介紹此類軟件的開發:

第一篇是關於XMPP 協議是啥,IM 是啥以及一個比較有名的開源實現,該開源實現包括三個部分(Spark、Smack和Openfire);

第二篇講如何開發基於Spark 的客戶端IM 插件部分;

第三篇講如何開發基於Openfire 服務器端的插件部分。

好了,進入正題吧。

 

什麼是XMPP?
Extensible Messaging and Presence Protocol,簡單的來講,它就是一個發送接收處理消息的協議,但是這個協議發送的消息,既不是二進制的東東也不是字符串,而是XML。正是因爲使用 了XML作爲消息傳遞的中介,Extensible 才談的上,不是麼?嘿嘿。再詳盡的東西,我也就不多介紹了,大家可以去百度百科裏查看下,鏈接在這裏

什麼是IM ?

Instant Messenger,及時通信軟件,就是大家使用的QQ、MSN Messenger和Gtalk等等。其中Gtalk 就是基於XMPP 協議的一個實現,其他的則不是。當前IM 幾乎作爲每個上網者必然使用的工具,在國外的大型企業中有一些企業級的IM應用,但是其商業價值還沒完全發揮出來。設想既然XMPP 協議是一個公開的協議,那麼每個企業都可以利用它來開發適合本身企業工作,提高自身生產效率的IM;甚至,你還可以在網絡遊戲中集成這種通信軟件,不但讓你 可以邊遊戲邊聊天,也可以開發出適合遊戲本身的IM 應用,比如說一些遊戲關鍵場景提醒功能,團隊語音交流等等都可以基於IM來實現。說了這麼多,就是一個意思,其商業價值遠遠比你想的高!

Spark Smack 和 Openfire

開源界總是有許多有趣的東東,這三個合起來就是一個完整的XMPP IM 實現。包括服務器端——Openfire,客戶端——Spark,XMPP 傳輸協議的實現——Smack(記住,XMPP是一個協議,協議是需要實現的,Smack起到的就是這樣的一個作用)。三者都是基於Java 語言的實現,因此對於熟悉Java 的開發者來說不是很難


Spark 提供了客戶端一個基本的實現,並提出了一個很好的插件架構,這對於開發者來說不能不說是一個福音。我強烈建議基於插件方式來實現你新增加的功能,而不是去 改它的源代碼,這樣有利於你項目架構,把原始項目的影響降到最低,文章以後的部分也是基於這種插件體系進行開發的

Openfire 是基於XMPP 協議的IM 的服務器端的一個實現,雖然當兩個用戶連接後,可以通過點對點的方式來發送消息,但是用戶還是需要連接到服務器來獲取一些連接信息和通信信息的,所以服務 器端是必須要實現的。Openfire 也提供了一些基本功能,但真的很基本的!慶幸的是,它也提供插件的擴展,像Spark 一樣,我同樣強烈建議使用插件擴展的方式來增加新的功能,而不是修改人家的源代碼。

Smack 是一個XMPP 協議的Java 實現,提供一套可擴展的API,不過有些時候,你還是不得不使用自己定製發送的XML 文件內容的方式來實現自己的功能

下圖展示了三者之間的關係:
點擊查看原始尺寸
從圖上可以瞭解到,client 端和server端都可以通過插件的方式來進行擴展,smack是二者傳遞數據的媒介。

嗯,今天就寫到這裏吧,畫圖花了好久的時間呀。下一篇介紹一下如何開發基於Spark 的插件程序,並總結一些我自己的一些心得,舉一個實際的例子,需要涉及到的一些XML 文件的解析與生成,還有Spark、Smack 自己提供的API ,還有ant 的一些基本知識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章