[發明專利]處理數據的方法、服務器、系統和計算機可讀程序介質有效
| 申請號: | 201911073558.1 | 申請日: | 2019-11-06 |
| 公開(公告)號: | CN110898434B | 公開(公告)日: | 2023-07-25 |
| 發明(設計)人: | 程道雷;洪學海 | 申請(專利權)人: | 上饒市中科院云計算中心大數據研究院 |
| 主分類號: | A63F13/77 | 分類號: | A63F13/77;A63F13/79 |
| 代理公司: | 北京科家知識產權代理事務所(普通合伙) 11427 | 代理人: | 張勛 |
| 地址: | 334000 江西*** | 國省代碼: | 江西;36 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 處理 數據 方法 服務器 系統 計算機 可讀 程序 介質 | ||
1.一種處理數據的方法,其特征在于,包括:
初始化服務器時,將玩家游戲數據儲存在第一數據庫中,服務器啟動后,將所述玩家游戲數據載入到內存中的不同數據結構中;
玩家發送玩家游戲數據到服務器后,服務器對所述玩家游戲數據進行分類,將分類后的玩家游戲數據發送到預先配置的分管各類玩家游戲數據的消息隊列中;
讀取服務器的玩家游戲數據時,優先從所述內存的不同數據結構中讀取,若讀取失敗,則從第二數據庫中讀取玩家游戲數據,若讀取失敗,則從所述第一數據庫中讀取;
存儲玩家游戲數據時,優先更新內存中數據,再更新所述第一數據庫中的玩家游戲數據,最后更新所述第二數據庫中的玩家游戲數據;
所述第一數據庫為Mysql數據庫,第二數據庫為Redis緩存數據庫;
所述服務器至少包括網絡通信框架Netty、設計層開源框架Spring、序列化通信協議Probuf、持久層框架?Mybatis,第一數據庫Mysql和第二數據庫Redis用于數據的持久化和緩存;有的數據直接對Mysql進行操作,有的數據需要先寫入Redis并從Reids中進行讀取,Mysql中的數據會用于更新Redis,而Redis中的數據不會用于更新Mysql;具體的配置和部署方式如下:Server1和Server2為兩臺地域位置不同的阿里云Centos7?64位系統服務器,在上面安裝相同的Jdk版本,所用版本號為openjdk?version?1.8.0_191,用于運行游戲服務端jar包;Mysql和Redis安裝在另外一臺服務器中,使用的版本分別為?Redis-4.0.10和Mysql-14.14?Linux?,用于數據的持久化和緩存;
開發環境配置:服務端程序開發環境為Window?10?64位、Eclipse?2018,?Jdk?1.8.0_191,并通過maven發布jar包;客戶端發起連接后,以長連接的方式登錄游戲,相應建立一個Channel,通過這個Channel進行通信;玩家上線時,Channel處于激活狀態,玩家下線時,Channel則轉為非激活狀態;玩家登錄以后,通過玩家的id檢查該玩家是否為新用戶,如果是新用戶,創建玩家的User實例,并通過Map將Channel和玩家User映射;這樣就可以通過Channel找到玩家;如果是老用戶,同樣要更新Channel和User對應關系;任務和郵件的配置數據,建成對應的表格保存在Mysql中,并在服務器啟動的時候加載到內存中作為緩存,對應的管理類為TaskManager和MailManager;加載在內存中的好處是,下次讀取數據時,不用去Mysql中取數據,直接從內存中取數據,效率更高;當新注冊的玩家登錄游戲后,通過獲取TaskManager中緩存的任務配置數據,生成玩家自己的任務數據,保存在UserTaskManager中,需要注意的是,每個User必須要擁有一個UserTaskManager對象,負責該玩家的Task管理;同理,每個User擁有一個UserMailManager對象,在玩家等級提升或者達成成就時,通過MailManager中的配置數據,生成一條玩家的Mail,保存在UserMailManager中,供玩家加載查看等操作;這部分的數據,既需要保存在內存中,并持久化到數據庫中;玩家再次登錄時,需要從數據庫重新加載一次這些數據,從而保證玩家從不同服務器登錄時的數據是同步的;對于像排行榜數據、玩家個人信息數據等數據是需要實時更新顯示的數據;每次更新這些數據,先更新Mysql中的數據,再更新Redis中的數據,讀取數據則直接從Redis中讀取;游戲系統包括三個消息隊列:?UserMsgQueue、MatchMsgQueue和FightMsgQueue;同時設置三個線程去分別處理三個隊列中的數據;UserMsgQueue保存玩家個人以及玩家之間的數據操作消息;MatchMsgQueue保存玩家戰斗匹配相關消息;FightMsgQueue保存戰斗中的操作數據;具體邏輯為:當玩家向服務器發送消息時,服務端通過channel進行傳輸到不同的handle中進行處理;首先進行解碼,然后根據獲取到的消息類型,對消息進行分類,添加到對應的三個消息隊列中;對應的三個線程在系統啟動時開始運行,檢測到對應消息隊列中的消息后就進行相應處理;對于戰斗系統,通過幀同步技術,實現同一個房間里的玩家數據同步;一種實現方式是在FightMsgQueue對應的線程中,設定好幀率,不斷輪詢FightMsgQueue中是否有新數據,如果有新數據,就封裝成Frame,分發給房間內所有的玩家;玩家根據收到的數據,對界面進行刷新;在這個過程如果涉及到數據統計、分發消息給玩家的任務,都需要異步處理,不能讓復雜的運算阻塞了消息的同步;當玩家獲得新的分數時,通過算法獲得一個新的分數值作為要存入Redis的數據;關于算法,比如是首先獲得當前時間的秒數,獲得時間差,為了使相同分數的玩家,先獲得者排在前面,后獲得的玩家排在后面,所以先獲得的玩家加一個較大數,后獲得玩家加一個較小數;然后再獲得redis要存放的分數值;通過玩家的uid區分不同玩家,再用RankKey字符串區分不同的排行榜,添加到Redis的SortedSet中;在游戲服務器啟動時,將玩家的排行數據載入Redis中,多個游戲服務器共用一個Redis,加載數據時,Redis會根據玩家的uid刷新Redis中已經存在的數據,所以不會造成數據的重復;當玩家進行操作時產生了新的分數,那么將玩家的分數分別存入到Redis和Mysql中;當玩家需要獲得排行榜數據時,直接從Redis中調用,這樣所有玩家調用到的排行榜數據都是實時的;讀取玩家個人信息時,優先讀取Redis,并保持與Mysql中的數據一致;在游戲中,玩家的權限只能通過排行榜或者好友列表查看其他玩家的個人基本信息,因此,玩家獲取的數據,也是實時同步數據;如果玩家的好友很多,就通過分頁加載的方式,這樣客戶端就不會出現卡頓的情況。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于上饒市中科院云計算中心大數據研究院,未經上饒市中科院云計算中心大數據研究院許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911073558.1/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種模塊化機柜及組裝方法
- 下一篇:一種用于服務器機柜生產的監控反饋系統
- 數據顯示系統、數據中繼設備、數據中繼方法、數據系統、接收設備和數據讀取方法
- 數據記錄方法、數據記錄裝置、數據記錄媒體、數據重播方法和數據重播裝置
- 數據發送方法、數據發送系統、數據發送裝置以及數據結構
- 數據顯示系統、數據中繼設備、數據中繼方法及數據系統
- 數據嵌入裝置、數據嵌入方法、數據提取裝置及數據提取方法
- 數據管理裝置、數據編輯裝置、數據閱覽裝置、數據管理方法、數據編輯方法以及數據閱覽方法
- 數據發送和數據接收設備、數據發送和數據接收方法
- 數據發送裝置、數據接收裝置、數據收發系統、數據發送方法、數據接收方法和數據收發方法
- 數據發送方法、數據再現方法、數據發送裝置及數據再現裝置
- 數據發送方法、數據再現方法、數據發送裝置及數據再現裝置





