tigase,消息中心,概要設(shè)計(jì)_第1頁(yè)
tigase,消息中心,概要設(shè)計(jì)_第2頁(yè)
tigase,消息中心,概要設(shè)計(jì)_第3頁(yè)
tigase,消息中心,概要設(shè)計(jì)_第4頁(yè)
tigase,消息中心,概要設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、tigase消息中心概要設(shè)計(jì) 文檔歷史日期作者版本注釋2012/06/08chensx1.0創(chuàng)建2012/06/25chensx1.1增加在線數(shù)據(jù)統(tǒng)計(jì)功能1. 總體概述(看不清楚可以適當(dāng)拉大)這里關(guān)注以下功能:5、uicSer調(diào)用syncSer同步用戶接口6、publishSer向pubsubSer發(fā)布廣告7、查找訂閱相關(guān)者,或插入前端廣告應(yīng)用訂閱的相關(guān)信息8、使用XMPP把廣告發(fā)給訂閱者9、syncSer去數(shù)據(jù)庫(kù)查找在線情況,在線馬上發(fā)送,不在線數(shù)據(jù)存儲(chǔ)回?cái)?shù)據(jù)庫(kù)10、數(shù)據(jù)同步,會(huì)話管理,IM消息發(fā)送14、syncSer訪問tigasedb庫(kù)15、syncSer調(diào)用dubbo授權(quán)成功則改變ti

2、gasedb用戶狀態(tài)2. PubsubServer和SyncServer需求,tigase整改需求Pubsubserver概要需求1、 實(shí)現(xiàn)單個(gè)用戶消息下發(fā)功能2、 現(xiàn)實(shí)多個(gè)用戶消息下發(fā)功能3、 現(xiàn)實(shí)廣播功能4、 對(duì)用戶消息下發(fā)實(shí)現(xiàn)離線是否需要下發(fā)功能5、 消息推送DEMO界面開發(fā)SyncServer概要需求1、 同步用戶信息(包括禁用、啟用、增加功能)2、 獲取多個(gè)用戶狀態(tài)3、 獲取單個(gè)用戶狀態(tài)4、 分頁(yè)查詢用戶狀態(tài)(以上2、3、4服務(wù)在Pubsubserver也提供)tigase整改需求1、 加入dubbo消費(fèi)者的支持2、 tigase 授權(quán),使用uic的user進(jìn)行授權(quán)3、 開發(fā)離線消息

3、是否發(fā)送支持4、 前端網(wǎng)絡(luò)斷開超時(shí)5 minute 服務(wù)端斷開改會(huì)話,置為offline狀態(tài)(超時(shí)時(shí)間可設(shè)置)5、 使用tsung測(cè)試tigase 負(fù)載能力6、 解決tigase集群配置等方法3. pubsubServer和SyncServer接口概要設(shè)計(jì)3.1. pubsubServer考慮到負(fù)載均衡,集成dubbo框架進(jìn)行開發(fā)grape-pubsub-api接口設(shè)計(jì)如下:/* * 通知服務(wù)接口 * author chensx * date 2012-3-27 下午3:38:32 * version 1.0 */public interface NotifyService /* * 發(fā)布廣播

4、 * author chensx * date 2012-3-27 下午3:39:18 * param message 要發(fā)送到消息 * param SendFlagOfOffline 離線消息發(fā)送標(biāo)記true需要發(fā)送/false不需要發(fā)送 */ public void sendBroadcast(String strMessage,boolean SendFlagOfOffline); /* * 發(fā)布組播即多個(gè)用戶 * author chensx * date 2012-05-09 下午5:39:18 * param userList 用戶list * param message 要發(fā)送到消

5、息 * param SendFlagOfOffline離線消息發(fā)送標(biāo)記 true需要發(fā)送/false不需要發(fā)送 */public void sendMulticast(List userList,String strMessage,boolean SendFlagOfOffline); /* * 通知某個(gè)用戶 * author chensx * date 2012-3-27 下午3:39:41 * param username * param message * param SendFlagOfOffline離線消息發(fā)送標(biāo)記true需要發(fā)送/false不需要發(fā)送 */ public void

6、sendNotifcationToUser(String username,String strMessage,boolean SendFlagOfOffline); /* * 通知某個(gè)用戶,默認(rèn)發(fā)送離線消息 * author chensx * date 2012-3-27 下午3:39:41 * param username * param message */ public void sendNotifcationToUser(String username,String strMessage);grape-pubsub-server為grape-pubsub-api接口的實(shí)現(xiàn)工程當(dāng)相同父

7、工程的其他項(xiàng)目需要調(diào)用此接口時(shí)需要在pom.xml文件配置如下參數(shù),不同父工程需要寫版本號(hào):com.rzico.grapegrape-sync-api$project.parent.versionDubbo工程的配置在這里簡(jiǎn)略工程中perties為消息推送相關(guān)配置tigase_host=42tigase_virt_host=port = 5222fromUserName = 10000fromUserPwd = chenshaoxiantigase_host 為tigase服務(wù)器IPtigase_

8、virt_host為虛擬域名port為xmpp端口使用fromUserName和fromUserPwd登錄xmpp服務(wù)器去給對(duì)方發(fā)送消息發(fā)送消息的實(shí)現(xiàn)包括幾個(gè)步驟(xmpp通信)1、單例模式獲取tigase的相關(guān)配置信息2、根據(jù)配置信息初始化xmpp服務(wù)器的鏈接3、登錄xmpp服務(wù)器4、配置發(fā)送消息的參數(shù)包括 消息內(nèi)容、離線消息是否發(fā)送標(biāo)識(shí)等5、消息體Message發(fā)送3.2. syncServer集成dubbo框架進(jìn)行開發(fā),同步接口grape-sync-api設(shè)計(jì)如下:/* * 用戶同步接口 * author chensx * date 2012-3-28 下午2:11:01 * versi

9、on 1.0 */ public interface UserSyncService /* * 同步用戶信息 禁用0、啟用1、刪除2、增加3 * author chensx * date 2012-5-8 下午3:43:58 * param username 用戶名 * param flag 禁用0、啟用1、刪除2、增加3 * return true/false */ public boolean syncUser(String username,int flag); /* * 測(cè)試用例(負(fù)載測(cè)試使用) * author chensx * date 2012-5-16 上午9:44:57 *

10、param strId * param username * param userPw * param flag * return true/false */ boolean testUser(String strId, String username, String userPw, int flag);狀態(tài)接口設(shè)計(jì)如下:/* * 設(shè)備用戶狀態(tài)接口 * author chensx * date 2012-3-28 下午2:11:01 * version 1.0 */ public interface UserStatusService /* * 獲取多個(gè)用戶狀態(tài) * author chensx

11、 * param userList 用戶列表 * date 2012-3-27 下午5:46:23 * return 多個(gè)用戶狀態(tài) */ public List getMultiUserStatus(List userList); /* * 獲取單個(gè)用戶狀態(tài) * author chensx * date 2012-3-27 下午5:47:35 * param username 單個(gè)用戶名 * return UserStatus 用戶狀態(tài)對(duì)象 */ public UserStatus getUserStatus(String username); /* * 獲取不同狀態(tài)的用戶相關(guān)信息(內(nèi)部測(cè)試使

12、用) * author chensx * date 2012-3-30 上午9:53:15 * param statusFlag 0-離線、1在線、-1所有 * return List */ public List getUserStatusOfFlag(int statusFlag); /* * 分頁(yè)獲取用戶狀態(tài) * author chensx * date 2012-5-9 下午4:31:02 * param page 分頁(yè)的參數(shù)信息包括頁(yè)碼、一頁(yè)條數(shù)等 * param filters 分頁(yè)過濾條件 * return Page */ public Page userStatusOfPage

13、(PageRequest page, List filters)throws Exception;ORM 使用hibernate4.0 對(duì)tigasedb進(jìn)行交互操作4. Tigase功能調(diào)整概要4.1. 功能概要設(shè)計(jì)一、UIC授權(quán)在tigase中集成dubbo消費(fèi)者,調(diào)用UIC接口進(jìn)行授權(quán)集成方式如下:1、更改pom.xml配置(需要去除沖突包/加入uic接口包)2、導(dǎo)入相關(guān)lib jar包,相關(guān)包如下:以上包需要關(guān)聯(lián),這些包都是有關(guān)聯(lián)的,隨便去掉一個(gè),程序執(zhí)行就會(huì)報(bào)錯(cuò)3、加入dubbo配置文件4、在tigase方法中調(diào)用uic接口二、離線消息是否發(fā)送可選功能1、獲取grape-pubsub

14、-server發(fā)送到的消息體2、解析消息體3、獲取用戶是否離線標(biāo)識(shí),獲取離線消息是否發(fā)送標(biāo)識(shí)4、根據(jù)以上標(biāo)識(shí)判斷是否處理離線消息三、解決斷網(wǎng)不下線問題1、線程每五分鐘檢測(cè)用戶心跳 (sleep方式)2、獲取心跳最近時(shí)間3、當(dāng)前時(shí)間心跳最近時(shí)間1分鐘時(shí),關(guān)閉該用戶session改變?cè)撚脩魯?shù)據(jù)庫(kù)狀態(tài)所以斷網(wǎng)的情況下,操作員看到用戶下線的時(shí)間為(1分鐘下線時(shí)間6分)4.2. 數(shù)據(jù)庫(kù)調(diào)整初期通過數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)同步和授權(quán)同步如下:-添加記錄時(shí)觸發(fā)tigase user添加數(shù)據(jù)CREATE DEFINER=root% TRIGGER grape_uic.tri_uicUser_insert BEFORE

15、INSERT ON grape_uic.uic_user FOR EACH ROWBegin insert into tigase.tig_users(user_id, sha1_user_id) values (CONCAT(new.user_name,), sha1(lower(CONCAT(new.user_name,);End;-刪除記錄時(shí)觸發(fā)tigase user刪除數(shù)據(jù)CREATE DEFINER=root% TRIGGER grape_uic.tri_uicUser_delete BEFORE DELETE ON grape_uic.uic_u

16、ser FOR EACH ROWBegin DELETE FROM tigasedb.tig_users WHERE user_id = CONCAT(old.user_name,); End;-tigasedb存儲(chǔ)過程的變更DROP PROCEDURE IF EXISTS tigasedb.TigAddUser;CREATE PROCEDURE tigasedb.TigAddUser(_user_id varchar(2049) CHARSET utf8, _user_pw varchar(255) CHARSET utf8)begindeclare res_uid big

17、int unsigned;if _user_pw is null theninsert into tig_users (user_id, sha1_user_id, user_pw)values (_user_id, sha1(lower(_user_id), _user_pw);elseinsert into tig_users(user_id, sha1_user_id, user_pw)values (_user_id,sha1(lower(_user_id),_user_pw);end if; select LAST_INSERT_ID() into res_uid;insert in

18、to tig_nodes (parent_nid, uid, node)values (NULL, res_uid, root);if _user_pw is NULL thenupdate tig_users set account_status = -1 where uid = res_uid;end if;/*select res_uid as uid;*/end;授權(quán)如下:DROP PROCEDURE IF EXISTS tigasedb.TigUserLogin;CREATE PROCEDURE tigasedb.TigUserLogin(_user_id varchar(2049)

19、 CHARSET utf8,_user_pw varchar(2049) CHARSET utf8)begin if exists(select user_name from grape_uic.uic_user u where (u.user_pwd= MD5(CONCAT(_user_pw,) AND (u.user_name = substring_index(_user_id, , 1)thenupdate tig_usersset online_status = 1, last_login = CURRENT_TIMESTAMPwhere sha1_user_id

20、= sha1(lower(_user_id);select _user_id as user_id;elseupdate tig_users set failed_logins = failed_logins + 1 where sha1_user_id = sha1(lower(_user_id);select NULL as user_id;end if;end;后期(終結(jié)版)數(shù)據(jù)庫(kù)整改如下:-登出時(shí)設(shè)置狀態(tài)為離線狀態(tài)0DROP PROCEDURE IF EXISTS tigasedb.TigUserLogout;CREATE PROCEDURE tigasedb.TigUserLogou

21、t(_user_id varchar(2049) CHARSET utf8)beginupdate tig_usersset online_status = 0, /*greatest(online_status - 1, 0),*/last_logout = CURRENT_TIMESTAMPwhere user_id = _user_id;end;-登錄時(shí)設(shè)置狀態(tài)為在線狀態(tài)1,并設(shè)置不從tigase user 授權(quán)DROP PROCEDURE IF EXISTS tigasedb.TigUserLogin;CREATE PROCEDURE tigasedb.TigUserLogin(_us

22、er_id varchar(2049) CHARSET utf8,_user_pw varchar(2049) CHARSET utf8)begin if exists(select user_id from tig_userswhere (sha1_user_id = sha1(lower(_user_id) AND (user_id = _user_id)thenupdate tig_usersset online_status = 1, last_login = CURRENT_TIMESTAMPwhere sha1_user_id = sha1(lower(_user_id);sele

23、ct _user_id as user_id;elseupdate tig_users set failed_logins = failed_logins + 1 where sha1_user_id = sha1(lower(_user_id);select NULL as user_id;end if;end;-設(shè)置為無(wú)返回值DROP PROCEDURE IF EXISTS tigasedb.TigAddUser;CREATE PROCEDURE tigasedb.TigAddUser(_user_id varchar(2049) CHARSET utf8, _user_pw varcha

24、r(255) CHARSET utf8)begindeclare res_uid bigint unsigned;insert into tig_users (user_id, sha1_user_id, user_pw)values (_user_id, sha1(lower(_user_id), _user_pw);select LAST_INSERT_ID() into res_uid;insert into tig_nodes (parent_nid, uid, node)values (NULL, res_uid, root);if _user_pw is NULL thenupda

25、te tig_users set account_status = -1 where uid = res_uid;end if;/*select res_uid as uid;*/end;5. 在線數(shù)據(jù)統(tǒng)計(jì)5.1. 數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)字典如下:表5-1在線時(shí)長(zhǎng)表(tb_online_time)名稱 代碼 數(shù)據(jù)類型 長(zhǎng)度 主鍵 外鍵 自增IDidbigint unsigned 20truefalse用戶名user_idvarchar 2049falsefalse 統(tǒng)計(jì)日期info_dateDATE falsefalse每天在線時(shí)長(zhǎng)everyday_online_time int 11falsefal

26、se備注remark varchar 2049falsefalse創(chuàng)建時(shí)間 create_time timestamp falsefalse其中user_id和online_date為聯(lián)合索引腳本如下:CREATE TABLE tb_online_time ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 自增ID, user_id varchar(64) NOT NULL COMMENT 用戶名, info_date date NOT NULL COMMENT 統(tǒng)計(jì)日期, everyday_online_time int(11)

27、 NOT NULL COMMENT 每天在線時(shí)長(zhǎng), remark varchar(2049) DEFAULT NULL COMMENT 備注, create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 記錄創(chuàng)建時(shí)間, PRIMARY KEY (id), KEY user_id (user_id(16), KEY info_date (info_date), KEY everyday_online_time (everyday_online_time), KEY userId_compositeIndex (user_id,

28、info_date) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=在線時(shí)長(zhǎng)統(tǒng)計(jì)表;持續(xù)在線時(shí)長(zhǎng)在tig_users表后面增加keep_online_time字段 如下:CREATE TABLE tig_users ( uid bigint(20) unsigned NOT NULL AUTO_INCREMENT, user_id varchar(2049) NOT NULL, sha1_user_id char(128) NOT NULL, user_pw varchar(255) DEFAULT NULL, acc_create_time tim

29、estamp NOT NULL DEFAULT CURRENT_TIMESTAMP, last_login timestamp NOT NULL DEFAULT 1999-01-01 00:00:00,last_logout timestamp NOT NULL DEFAULT 1999-01-01 00:00:00,keep_online_time int(11) DEFAULT 0 COMMENT 持續(xù)在線時(shí)長(zhǎng))5.2. 功能概要設(shè)計(jì)需要統(tǒng)計(jì)的數(shù)據(jù)有: 最近登入時(shí)間 最近登出時(shí)間 持續(xù)最長(zhǎng)在線時(shí)長(zhǎng) 每日在線時(shí)長(zhǎng) 日最大在線時(shí)長(zhǎng)/ 日平均在線時(shí)長(zhǎng)/每日在線時(shí)長(zhǎng)everydayOnlineTi

30、me簡(jiǎn)寫為EOT持續(xù)最長(zhǎng)在線時(shí)長(zhǎng)keepOnlineTime簡(jiǎn)寫為KOT5.2.1. 日在線時(shí)長(zhǎng)統(tǒng)計(jì)沒登錄沒登出/有登錄沒登出沒登錄有登出有登錄有登出/1、 任務(wù)定時(shí)器當(dāng)天0點(diǎn) 定時(shí)生成 在線時(shí)長(zhǎng)數(shù)據(jù),在線用戶默認(rèn)時(shí)長(zhǎng)為24*60*60秒,登錄次數(shù)=1,離線用戶默認(rèn)時(shí)長(zhǎng)為0,登錄次數(shù)=02、當(dāng)用戶登錄(記錄登錄時(shí)間)當(dāng)數(shù)據(jù)庫(kù)(EOT= 24*60*60 時(shí) 不做處理3、當(dāng)用戶退出(記錄退出時(shí)間)更新EOT_temp1= EOT(可能的最大在線時(shí)長(zhǎng))-(24*60*60-退出時(shí)間)/登出時(shí)間-登錄時(shí)間EOT _temp2=退出時(shí)間-0當(dāng)數(shù)據(jù)庫(kù) 登錄次數(shù)=1 & EOT = 24*60*60時(shí)up

31、date EOT= EOT_temp2Else if 登錄次數(shù)=1時(shí)update EOT=EOT_temp1當(dāng)數(shù)據(jù)庫(kù) 登錄次數(shù)1時(shí)update EOT=EOT_temp1 /EOT+ EOT _temp(第二次登錄后累加計(jì)算在線時(shí)長(zhǎng)) 以上情況可以合并登錄次數(shù)=15、 非正常退出,采用wacthdog 監(jiān)控心跳包,超時(shí)觸發(fā)退出動(dòng)作6、 日最大在線時(shí)長(zhǎng)通過數(shù)據(jù)庫(kù)查找可得7、 日平均在線時(shí)長(zhǎng)通過數(shù)據(jù)庫(kù)查找可得5.2.2. 持續(xù)最長(zhǎng)在線時(shí)長(zhǎng)初始化用戶時(shí) 默認(rèn)該用戶KOT為0,每次用戶退出時(shí),KOT_temp=退出時(shí)間-登錄時(shí)間,如果KOT_temp數(shù)據(jù)庫(kù)KOP則update 數(shù)據(jù)庫(kù)KOP= KOT_

32、temp5.3. 外部dubbo接口設(shè)計(jì)1、 用戶list的最大連續(xù)在線時(shí)長(zhǎng)(x-用戶 y-最大連續(xù)在線時(shí)長(zhǎng))在用戶狀態(tài)接口里面2、 用戶list在startDate至endDate的日平均在線時(shí)長(zhǎng)(x-用戶 y-平均在線時(shí)長(zhǎng))3、 用戶list在startDate至endDate的日最大在線時(shí)長(zhǎng)(x-用戶 y-最大在線時(shí)長(zhǎng))2和3可以在一個(gè)圖表上展現(xiàn)4、 用戶 在startDate至endDate的每日在線時(shí)長(zhǎng)/(x-日期 y-每日在線時(shí)長(zhǎng))6. 登錄登出事件和在線數(shù)值統(tǒng)計(jì)詳細(xì)需求查看多媒體業(yè)務(wù)平臺(tái)需求規(guī)格說(shuō)明書120730.doc6.3.2章節(jié)6.1. 數(shù)據(jù)庫(kù)設(shè)計(jì)登入事件數(shù)據(jù)庫(kù)腳本如下表6

33、-1用戶事件表(tb_user_event)名稱 代碼 數(shù)據(jù)類型 長(zhǎng)度 主鍵 外鍵 自增IDidbigint unsigned 20trueFalse 用戶名user_idvarchar 2049falsefalse 事件標(biāo)示event_flag int 2falsefalse在線數(shù)Online_countint 11falsefalse總用戶數(shù)User_countint 11falsefalse事件時(shí)間event_timetimestamp falsefalse腳本如下:CREATE TABLE tb_user_event ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 自增ID, user_id varchar(64) NOT NULL COMMENT 用戶名, oline_count int(11) NOT NULL COMMENT 在線數(shù), user_count int(11) NOT NULL COMMENT 總用戶數(shù), event_flag int(2) NOT NULL COMMENT 事件標(biāo)示 -1登出,1登錄, event_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 事件時(shí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論