[初識總結]開源即時通訊IM Openfire+spark and (comet實現)

---------------------------------------------------------------

 

本來只是想了解下基於WEB即時通信如何實現的(如WebQQ),沒想到水這麼深,涉及到的東西很多,技術上也給了我啓發,起初還真不知道有“服務器推技術”的存在。

 

 

 

 

到目前爲止本人已經成功搭建了openfire+spark,能實現聊天。但這客戶端是基於CS的,基於WEB網頁形式的客戶端有jwchat,貌似過於簡單了點。再者就是sparkweb,這是基於FLASH的客戶端。

還沒找到符合自己要求的基於WEB的客戶端,難道只能自己修改相應源碼來開發了嗎。研究。。。。繼續研究

 

 

 

 

 

 

---------------------------------------------------------------

現在WebIM可謂非常流行,其中已實現WebIM的廠商包括大名鼎鼎的sohuTencent QQMicrosoft MSNGoogle Gtalk,新浪,alibaba的淘寶旺旺,很多很多,基於WebIM的聊天引擎設計思路無非以下幾種:

1.     Ajax無刷新交互,設計一種時間間隔定期獲取數據(如先每5秒刷新一次,再‘按51015,……刷新一次獲取數據,目前利用這一思路實現聊天引擎的開源產品很多,大家可以自己到open-open網站查閱)

2.     基於Pushlet技術的聊天引擎的實現

3.     基於Comet技術的聊天引擎的實現

4.     基於Jetty服務器的Comet技術的聊天引擎的實現

5.     基於XMPP協議的聊天引擎的設計與實現(可以利用FlashAjaxJsJabber服務器交互)

目前利用的最多的是通過FlashXmlSocket+JS與網頁的聊天UI進行交互或直接利用Flash界面(可基於FlexAIR或其他等),本文重點介紹第5種聊天引擎的設計與實現,這也是大名鼎鼎GoogleGtalk採用的協議,關於XMPP協議,大家可以查閱 http://www.xmpp.org官方網站,先想聽聽大家的意見,大家一般實現WebIM是怎麼來設計與實現的呢?也是用開源的產品麼?

 

 

 

---------------------------整理收集-----------------------------------------

您可能已經聽說過 Comet,因爲它最近受到了一定的關注。Comet有時也稱反向 Ajax或服務器端推技術(server-side push)。其思想很簡單:將數據直接從服務器推到瀏覽器,而不必等到瀏覽器請求數據。聽起來簡單,但是如果熟悉Web應用程序,尤其是HTTP協議,那麼您就會知道,這絕不簡單。實現Comet風格的Web應用程序,同時保證在瀏覽器和服務器上的可伸縮性,這只是在最近幾年才成爲可能。目前一些主流網站都有類似的原理,例如:webQQ、開心網、白社會等等,它們中消息動態都是採用類似的技術,也許具體實現方式不一樣;

 

 

 

 

 網上收集到的資料見附件。。。。。。

 

 

 


    作爲一個技術人員,當你開始瞭解comet,都會或多或少有些興奮,內心也會有蠢蠢欲試的衝動,再加上現在webQQ,baidu hi等網頁聊天忽如一夜春風來,開得滿網絡都是,成了IT老大們下一個爭奪的陣地。最近我和我的一個朋友也牛刀小試,用dwr的comet技術實現了簡單在線聊天,當然我們不是爲了爭什麼,只是爲了滿足作爲技術人員的最原始的追求而已。不過其實它也簡單,無非就是獲取訪問網站的用戶列表,然後實現在線聊天就可以了。


    先說說獲取在線用戶列表,當用戶訪問某頁面時,onload事件,調用dwr反推到後臺,後臺先,新建一個用戶信息,然後裝進用戶在線列表數組裏(onlineUsers)。然後把onlineUsers當參數,反推到各個頁面,讓界面執行js,重新根據onlineUsers數組,生成在線列表;當用戶關閉時,調用dwr反推,讓它反推到各個在線用戶頁面後,執行刪除該用戶在信息。

    然後說一下在線聊天,選中在線列表的人員,點擊發起對話,調用dwr反推,去尋找與該用戶信息匹配的會話,然後通過服務器反推執行代碼到該用戶頁面,讓頁面執行對話信息的生成。當第一次連接建立後,dwr會記下雙方的的信息(相當於一個訪問地址),確立雙方的關係後就能繼續通話了,另外一個人也是這樣處理。

    效果,大家可以訪問DEMO,如果線上沒有用戶,你可以同時打開兩個IE自個玩,或者把鏈接發給朋友,跟他們聊聊;如果線上已有用戶,那你就可以直接跟她聊了,呵呵!

    這個DEMO,得感謝我們團隊的小馮,正是在他的努力下,這個DEMO才得以順利完成,他的QQ是: 158948314,如果需要交流,大家可以直接加他,驗證信息:javaeye
   
 http://jackshow.net/blog/2010/01/01/1262350860000.html

----------------------------------------------------------------------------------------
開源的comet實現:pushlet,dwr 2.0的reverse ajax和dojo的io.bind(),
聊天的客戶端和服務器端都有開源項目,我用過webchat,wildfire,等.推薦大家有需要的話可以去看看.

簡單例子(reverse ajax):http://blog.sina.com.cn/s/blog_5bd96d520100gau4.html

 


~~openfire~~~~即時通訊IM開發~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

即時通訊介紹以及開發流程:
http://blog.csdn.net/windone0109/archive/2009/10/16/4675944.aspx


源碼下載:http://www.igniterealtime.org/downloads/source.jsp
Openfire: IM服務器 

Spark:
 是一個開源,跨平臺IM-XMPP協議客戶端。它的特性支持集組聊天,
 電話集成和強大安全性能。
 http://uoik.cn/?uid-2-action-viewspace-itemid-433
 
SparkWeb: 基於WEB的FLASH客戶端 
JWCHAT: 基於WEB的客戶端
Asterisk-IM: 貌似是打電話功能 


Openfirek客戶端列表:http://xmpp.org/software/clients.shtml

 

Openfire源碼佈署與打包:
http://lmain.blog.51cto.com/779468/157942/
http://zyjwy02.iteye.com/blog/318037

 

見解:
http://rhythm-zju.blog.163.com/blog/static/31004200801504318444/


openfire底層源碼學習:
http://blog.sina.com.cn/s/blog_4002ed930100j0og.html

 

學習筆記:
http://roserouge.iteye.com/blog/244171
http://tw5566.iteye.com/blog/519442 --介紹SPARK源碼佈署(由於SVN上的源碼有很多BUG,實在受不了,還是直接下載EXE的安裝文件算了)
http://www.dnbcw.com/biancheng/java/hgkb106887.html --spark編譯問題

打電話功能:http://blog.tech4k.com/?tag=openfire

 

 

 

 


~~~~~~~~~~~~~~~~~openfire~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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