CIM2.1.0發(fā)布了,基于apache mina的java即時(shí)通訊服務(wù)端。與android客戶(hù)端完美結合,同時(shí)支持其他語(yǔ)言(ios,c,Action Script,.net等)客戶(hù)端的即時(shí)通信。
說(shuō)明:
此開(kāi)源版本為基礎功能版本,只有消息推送的基礎功能!netty版本,和mina版本結構和功能完全一致,大家可以選擇自己喜歡的或者合適的版本學(xué)習或者使用!
前言:
現在市面上有很多xmpp協(xié)議的即時(shí)通訊方案,openfire androidpn,等等。它們都是使用了apache mina開(kāi)發(fā),但是這些東西基本都需要二次改造開(kāi)發(fā)。而且改動(dòng)還很大,我也看過(guò)這些東西的源碼,發(fā)現代碼結構不太理想,耦合的情況太多,實(shí)在不好擴展。所謂XMPP協(xié)議。只不過(guò)是別人使用mina自定義了一個(gè)消息編碼解碼協(xié)議。通俗的講就是,xml形式消息的編碼與解碼,我們完全沒(méi)有必要在國外這套不成熟的openfire與xmpp上耗費過(guò)多的精力去研究,我們完全可以通過(guò)apache mina自定義自己的通訊協(xié)議,并可以為它使用自己的名字。我們不要盲目崇拜國外的有些東西,自己掌握原理,才是最重要的,各位切記~
這套IM系統為我個(gè)人自主開(kāi)發(fā)使用了apache mina,主要功能為服務(wù)端和客戶(hù)端,客戶(hù)端到客戶(hù)端的即時(shí)通信,可以支持包括文字圖片,語(yǔ)音等任何消息形式服務(wù)端使用的struts2+spring3和apache mina android端也使用的apache mina。這套IM系統結構還是非常清晰合理的,非常容易擴展和改造,下面是android版本的demo的目的是只是一個(gè)演示,可以參照它的代碼,使用這套系統開(kāi)發(fā)自己的東西,核心價(jià)值是一套高靈活性,相對標準化的即時(shí)通訊解決方案,即時(shí)聊天只是它的一種運用途徑!
服務(wù)端集群配置方案
服務(wù)端修改
1.多臺服務(wù)器集群配置,首先需要重寫(xiě)SessionManager接口(參考com.farsunset.ichat.cim.session.Cluster Session Manager.java),用戶(hù)登錄時(shí),將賬號和服務(wù)器IP存入數據庫中,這樣就可以統計各臺服務(wù)器接受的連接數量。2.客戶(hù)端連接服務(wù)器時(shí),服務(wù)端為客戶(hù)端動(dòng)態(tài)分配服務(wù)器IP,每次分配較為空閑的服務(wù)器IP3.服務(wù)端接受消息后通過(guò)接收者賬號查詢(xún)出對應的Iosession,和登錄的服務(wù)器IP,然后將消息信息傳往目標服務(wù)器處理發(fā)送
更新日志
1.修改消息斷包時(shí)沒(méi)有正確處理,導致消息接收不到的問(wèn)題
2.修改調用CIM Push Manager.stop(),在網(wǎng)絡(luò )切換時(shí)會(huì )恢復連接的問(wèn)題
3.修改netty版客戶(hù)端斷開(kāi)連接,服務(wù)端連接信息沒(méi)有更新的問(wèn)題
4.netty版本使用4.1.0,mina版本使用最新的2.0.13