網(wǎng)頁游戲架構(gòu)與開發(fā)-經(jīng)驗分享.ppt_第1頁
網(wǎng)頁游戲架構(gòu)與開發(fā)-經(jīng)驗分享.ppt_第2頁
網(wǎng)頁游戲架構(gòu)與開發(fā)-經(jīng)驗分享.ppt_第3頁
網(wǎng)頁游戲架構(gòu)與開發(fā)-經(jīng)驗分享.ppt_第4頁
網(wǎng)頁游戲架構(gòu)與開發(fā)-經(jīng)驗分享.ppt_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

WEBGAME開發(fā)經(jīng)驗分享 咖啡熊 李黎 qq 31670540email shangdi12lili 日期 2011 5 28 目錄 引言 游戲開發(fā)的程序員是否要了解游戲相關(guān)定義 邏輯 不需要 需要 網(wǎng)頁游戲概述 何為網(wǎng)頁游戲 網(wǎng)頁游戲與網(wǎng)絡(luò)游戲區(qū)別 為何會出現(xiàn)網(wǎng)頁游戲 網(wǎng)頁游戲特征 網(wǎng)頁游戲其實就是用瀏覽器玩的游戲 它不用下載客戶端 只要一臺能上網(wǎng)的電腦就可以進(jìn)行游戲 按是否需要下載客戶端來劃分是否網(wǎng)頁游戲 按用戶來劃分是否網(wǎng)頁游戲 較認(rèn)可定義 基于瀏覽器 擁有片段游戲時間的用戶進(jìn)行的網(wǎng)絡(luò)游戲稱為網(wǎng)頁游戲 下面我們主要針對這類游戲架構(gòu)與開發(fā)進(jìn)行討論 網(wǎng)頁游戲可以看作是網(wǎng)站和游戲的結(jié)合體 因此它具備了這兩類系統(tǒng)的特性 我們不但可以把網(wǎng)頁游戲看作是一個網(wǎng)站 也可以把它看作是一個網(wǎng)絡(luò)游戲 網(wǎng)站是B S結(jié)構(gòu) 網(wǎng)絡(luò)游戲則是C S結(jié)構(gòu) 網(wǎng)頁游戲則是這兩者的結(jié)合 網(wǎng)站是B S結(jié)構(gòu) MVC思想 瀏覽器通過HTTP協(xié)議發(fā)送數(shù)據(jù)請求 由控制器接受請求 通過路徑委托給數(shù)據(jù)模型處理 模型通過與邏輯層和持久層的交互 把處理結(jié)果反饋給控制器 控制器根據(jù)結(jié)果組裝視圖 并最終反饋給客戶端瀏覽器 網(wǎng)站服務(wù)器架構(gòu) 控制器 Controller 視圖 View 模型 Model 邏輯層和持久層 1 瀏覽器請求數(shù)據(jù) 返回瀏覽器 2 委托模型處理 3 提交集成模塊處理 4 集成模塊返回處理 5 模型返回處理結(jié)果 6 準(zhǔn)備視圖 7 返回視圖 網(wǎng)站服務(wù)器架構(gòu) StaticServer IMServer 客戶端瀏覽器 網(wǎng)站服務(wù)器架構(gòu) 網(wǎng)絡(luò)游戲服務(wù)器架構(gòu) 網(wǎng)絡(luò)游戲一般采用C S結(jié)構(gòu) 客戶端負(fù)責(zé)繪制游戲世界的實時畫面 服務(wù)器端則負(fù)責(zé)響應(yīng)所有客戶端的連接請求和游戲邏輯處理 并控制所有客戶端的畫面繪制 客戶端與服務(wù)器通過網(wǎng)絡(luò)數(shù)據(jù)包交互完成每一步游戲邏輯 網(wǎng)關(guān)服務(wù)器方式 主要職責(zé)是將客戶端通信和游戲服務(wù)器隔離 網(wǎng)關(guān)服務(wù)器只負(fù)責(zé)解析數(shù)據(jù)包 加解密 超時處理 過濾錯誤包 客戶端只需建立和網(wǎng)關(guān)服務(wù)器的連接即可進(jìn)入游戲 無需與游戲服務(wù)器直接連接 網(wǎng)關(guān)服務(wù)器分為LoginGate 登錄網(wǎng)關(guān)服務(wù)器 GameGate 游戲網(wǎng)關(guān)服務(wù)器 網(wǎng)絡(luò)游戲服務(wù)器架構(gòu) 1 LoginGate主要負(fù)責(zé)在玩家登錄時維護(hù)客戶端與LoginServer之間的網(wǎng)絡(luò)連接與通訊 對LoginServer和客戶端的通信數(shù)據(jù)進(jìn)行加密 校驗 2 LoginServer主要功能驗證玩家賬號是否合法 并生成一個登錄憑證SESSIONKEY 3 GameGate主要負(fù)責(zé)客戶端與GameServer之間網(wǎng)絡(luò)連接和通訊 對客戶端請求和發(fā)送數(shù)據(jù)做簡單分析 4 GameServer主要負(fù)責(zé)游戲邏輯處理 包括戰(zhàn)斗系統(tǒng) 任務(wù)系統(tǒng) 角色系統(tǒng) 地圖系統(tǒng)等 5 DBServer主要負(fù)責(zé)游戲數(shù)據(jù)緩存 包括玩家游戲?qū)傩詳?shù)據(jù) 降低數(shù)據(jù)庫壓力 6 Mserver負(fù)責(zé)一組服務(wù)器中對多臺GameServer之間數(shù)據(jù)轉(zhuǎn)發(fā)和廣播 7 Mysql負(fù)責(zé)數(shù)據(jù)持久化存儲 網(wǎng)絡(luò)游戲服務(wù)器架構(gòu) 網(wǎng)絡(luò)游戲服務(wù)器架構(gòu) 服務(wù)器使用Linxu系統(tǒng) NginxWebserver MySQL數(shù)據(jù)庫 PHPFastCGI環(huán)境 PHP做核心功能與邏輯功能開發(fā) 聊天和部分實時性功能使用C 一個游戲區(qū)采用1 2臺服務(wù)器為一組 WebServer DBServer主從 MemcacheServer 邏輯運算Server 老區(qū)節(jié)約成本可用1 2臺服務(wù)器 新區(qū)可用2 4臺分開架構(gòu)根據(jù)游戲區(qū)壓力而定 StaticServer做CDN 所有區(qū)共用 IMServer所有區(qū)共用 網(wǎng)頁游戲服務(wù)器架構(gòu) 用戶通過瀏覽器訪問服務(wù)器的時候 首先是訪問網(wǎng)頁服務(wù)器 通過網(wǎng)頁服務(wù)器 再去訪問游戲邏輯層 通知游戲邏輯層執(zhí)行玩家操作 并從游戲邏輯層里獲得游戲數(shù)據(jù) 或者直接通過訪問數(shù)據(jù)庫而獲得游戲數(shù)據(jù) 網(wǎng)頁游戲服務(wù)器架構(gòu) 網(wǎng)頁服務(wù)器的特點是觸發(fā)執(zhí)行 及當(dāng)有用戶訪問網(wǎng)頁的時候 才會執(zhí)行該網(wǎng)頁的程序代碼 而我們常見的WebGame實際上是需要24小時不間斷執(zhí)行的 因此網(wǎng)頁服務(wù)器的執(zhí)行方式并不適合做游戲 因此我們另外需要一個應(yīng)用程序來執(zhí)行這些24小時不間斷要做的事情 這也就是我們需要增加游戲服務(wù)器設(shè)計思路的原因 網(wǎng)頁游戲服務(wù)器架構(gòu) 客戶端瀏覽器 WEB服務(wù)器 邏輯運算層 CACHE數(shù)據(jù)層 公共數(shù)據(jù)庫 玩家數(shù)據(jù)庫 客戶端瀏覽器 WEB服務(wù)器 邏輯運算層 玩家數(shù)據(jù)庫 戰(zhàn)斗邏輯運算服務(wù)器群 服務(wù)端事件系統(tǒng) 什么是事件系統(tǒng)事件系統(tǒng)是整個WebGame系統(tǒng)里一個核心的組成部分 它控制著游戲的進(jìn)程 使游戲能夠及時執(zhí)行到期命令 事件是指游戲里玩家的某個活動指令 它可以分為瞬時活動和非瞬時活動 瞬時活動顧名思義就是在玩家發(fā)出指令的瞬間就能完成的活動 玩家從NPC里購買一瓶藥水 在玩家發(fā)出這個指令后 玩家的金錢減少 藥水增加1瓶 這一切都在玩家發(fā)出指令后瞬間完成 而非瞬時活動則是在玩家發(fā)出某個指令后一段時間才會被執(zhí)行 例如RPG游戲里玩家鼠標(biāo)點擊地圖上某個怪物進(jìn)行攻擊 這個攻擊過程就是一個非瞬時過程 它有了一個戰(zhàn)斗的過程 這個過程需要消耗一定的時間 在WebGame里 玩家的很多操作可以看作時候瞬時事件和非瞬時事件的結(jié)合 例如在策略游戲里升級建筑物 瞬時事件是村莊資源減少 非瞬時事件是建筑物建設(shè) 非瞬時事件的結(jié)果是建筑物等級上升 比如策略游戲中的軍隊?wèi)?zhàn)爭 瞬時事件是當(dāng)前村莊的士兵減少 非瞬時事件是減少的士兵移動到需要攻擊的村莊 結(jié)果是 兩個村莊開打了 服務(wù)端事件系統(tǒng) 事件隊列前面說了瞬時事件和非瞬時事件的概念 當(dāng)WebGame24小時運行的時候 系統(tǒng)就會產(chǎn)生大量的非瞬時事件 通常把這些非瞬時事件統(tǒng)一拿出來 按事件的結(jié)束時間進(jìn)行排序 并組成一個隊列 事件隊列 再通過一個觸發(fā)器 在事件設(shè)定的結(jié)束時間到達(dá)的那一刻執(zhí)行對應(yīng)的事件 服務(wù)端事件系統(tǒng) 實現(xiàn)方式數(shù)據(jù)庫建立數(shù)據(jù)庫內(nèi)存表存放事件隊列 通常會存在開始時間 結(jié)束時間 事件類型 事件參數(shù)等數(shù)據(jù) PHP寫一個FOR循環(huán)進(jìn)程查詢事件隊列內(nèi)存表 如果有到期時間的隊列則進(jìn)行處理并刪除該條隊列數(shù)據(jù) LINUX消息隊列通過LINUX消息隊列存儲游戲事件隊列 PHP定時監(jiān)聽該消息隊列中是否有待處理的事件隊列 進(jìn)行處理并刪除該條隊列數(shù)據(jù) 服務(wù)端事件系統(tǒng) 數(shù)據(jù)庫存儲方式與內(nèi)存存儲方式對比 游戲中的事件隊列會比較多 體現(xiàn)在數(shù)量和類型上 各種各樣的事件隊列 SLG游戲中 1 城池建造建筑 2 城池間戰(zhàn)爭 3 城池造兵 4 研究科技 RPG游戲中 1 戰(zhàn)斗打怪或PK 2 連續(xù)打怪掛機 3 修煉掛機 4 技能修煉 LINUX消息隊列存儲的優(yōu)勢在于降低了PHP進(jìn)程對數(shù)據(jù)庫查詢壓力 缺點是服務(wù)器宕機 內(nèi)存中存儲的消息事件隊列將會丟失 RPG打怪事件隊列丟失影響不大 只是當(dāng)前打的這個怪物無效 但是其他類型的事件隊列丟失話有可能影響巨大 還有查詢到期事件的效率問題 客戶端玩家發(fā)起戰(zhàn)斗事件指令 服務(wù)端PHP接收到該事件 進(jìn)行戰(zhàn)斗合法性驗證后將該事件即相關(guān)運算數(shù)據(jù)存儲到LINUX消息隊列中 PHP戰(zhàn)斗進(jìn)程監(jiān)聽LINUX消息隊列 如果發(fā)現(xiàn)消息隊列中有戰(zhàn)斗事件 1 PHP運算進(jìn)程進(jìn)行運算 2 PHP運算進(jìn)程在運算完之后將運算結(jié)果寫入玩家戰(zhàn)斗結(jié)果DB內(nèi)存表中存儲 并將戰(zhàn)報借助IM推送到客戶端進(jìn)行播放 注 戰(zhàn)斗結(jié)果是存DB中還是存入LINUX消息隊列或MEMCACHE內(nèi)存中 3 PHP戰(zhàn)斗結(jié)束進(jìn)程監(jiān)聽數(shù)據(jù)庫中玩家戰(zhàn)斗結(jié)果表 戰(zhàn)斗結(jié)束時間到 則刪除該條數(shù)據(jù) 并處理戰(zhàn)斗獎勵 4 避免玩家重復(fù)發(fā)起戰(zhàn)斗事件 可以在服務(wù)端通過玩家ID驗證是否有正在戰(zhàn)斗的戰(zhàn)斗隊列 注 是否需要做服務(wù)端戰(zhàn)斗狀態(tài)驗證 怎么做 查詢檢索 RPG戰(zhàn)斗進(jìn)程 綜上分析 服務(wù)端戰(zhàn)斗相關(guān)進(jìn)程會有兩個以上 PHP監(jiān)聽?wèi)?zhàn)斗事件并運算進(jìn)程 PHP監(jiān)聽?wèi)?zhàn)斗結(jié)束進(jìn)程 PHP處理戰(zhàn)斗運算進(jìn)程可以擴(kuò)展出戰(zhàn)斗運算分布式服務(wù)器 校對玩家機器和服務(wù)器端的時間 防止客戶端時間篡改 更準(zhǔn)確的完成事件交互 客戶端定時器長時間運行后和服務(wù)端時間會有時間差 游戲時間校對 SLG網(wǎng)頁游戲中常見的建筑建造倒計時 策略戰(zhàn)爭隊伍行軍倒計時 RPG網(wǎng)頁游戲中連續(xù)怪物攻擊 掛機等功能 網(wǎng)頁游戲中常見的資源儲備按小時產(chǎn)量時間遞增功能 數(shù)據(jù)庫設(shè)計 對于任何項目 一個好的數(shù)據(jù)庫設(shè)計極其重要 對于WEBGAME來說就更是重中之重了 一個好的數(shù)據(jù)庫設(shè)計相當(dāng)于一付好的骨架和脈絡(luò) 當(dāng)你的骨架搭建好 脈絡(luò)理順后 再進(jìn)行游戲功能代碼的時候?qū)浅m槙?怎么樣才能設(shè)計好一款WEBGAME的數(shù)據(jù)庫呢 在設(shè)計前因做好如下準(zhǔn)備 1 對于游戲業(yè)務(wù)邏輯要相當(dāng)清晰 2 多和游戲策劃人員進(jìn)行溝通 充分了解游戲功能需求 3 發(fā)現(xiàn)游戲邏輯部分有矛盾時及時向策劃人員反饋 調(diào)整 4 對于游戲功能先按模塊進(jìn)行劃分 然后再細(xì)化到每張表結(jié)構(gòu) 5 對于游戲邏輯復(fù)雜的功能點需要反復(fù)推敲 數(shù)據(jù)庫設(shè)計 開始設(shè)計數(shù)據(jù)庫的時候因注意 表名 字段名規(guī)范化 按游戲功能模塊劃分邏輯相近的表放在一起 合理的區(qū)分游戲配置數(shù)據(jù)表和玩家數(shù)據(jù)表 游戲配置數(shù)據(jù)表和游戲玩家數(shù)據(jù)表在表名上區(qū)分開 或則分庫 合理權(quán)衡表結(jié)構(gòu)的邏輯關(guān)系 性能優(yōu) 易理解 易擴(kuò)展 表字段類型長度設(shè)置合適 能用int就不要用varchar 能用mediumint就不要用int 合理使用數(shù)據(jù)庫表的縱切與橫切來降低表壓力 合理規(guī)劃表結(jié)

溫馨提示

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

最新文檔

評論

0/150

提交評論