本來隻是想了解下基于WEB即時通信如何實作的(如WebQQ),沒想到水這麼深,涉及到的東西很多,技術上也給了我啟發,起初還真不知道有“伺服器推技術”的存在。
到目前為止本人已經成功搭建了openfire+spark,能實作聊天。但這用戶端是基于CS的,基于WEB網頁形式的用戶端有jwchat,貌似過于簡單了點。再者就是sparkweb,這是基于FLASH的用戶端。
還沒找到符合自己要求的基于WEB的用戶端,難道隻能自己修改相應源碼來開發了嗎。研究。。。。繼續研究
---------------------------------------------------------------
現在WebIM可謂非常流行,其中已實作WebIM的廠商包括大名鼎鼎的sohu,Tencent QQ,Microsoft MSN,Google Gtalk,新浪,alibaba的淘寶旺旺,很多很多,基于WebIM的聊天引擎設計思路無非以下幾種:
1. Ajax無重新整理互動,設計一種時間間隔定期擷取資料(如先每5秒重新整理一次,再‘按5,10,15,……重新整理一次擷取資料,目前利用這一思路實作聊天引擎的開源産品很多,大家可以自己到open-open網站查閱)
2. 基于Pushlet技術的聊天引擎的實作
3. 基于Comet技術的聊天引擎的實作
4. 基于Jetty伺服器的Comet技術的聊天引擎的實作
5. 基于XMPP協定的聊天引擎的設計與實作(可以利用Flash或Ajax或Js與Jabber伺服器互動)
目前利用的最多的是通過Flash的XmlSocket+JS與網頁的聊天UI進行互動或直接利用Flash界面(可基于Flex的AIR或其他等),本文重點介紹第5種聊天引擎的設計與實作,這也是大名鼎鼎Google的Gtalk采用的協定,關于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通訊,im,即時聊天,dwr伺服器,openfire,spark