已閱讀5頁(yè),還剩20頁(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)介
WEBGAME開(kāi)發(fā)經(jīng)驗(yàn)分享 咖啡熊 李黎 qq 31670540email shangdi12lili 日期 2011 5 28 目錄 引言 游戲開(kāi)發(fā)的程序員是否要了解游戲相關(guān)定義 邏輯 不需要 需要 網(wǎng)頁(yè)游戲概述 何為網(wǎng)頁(yè)游戲 網(wǎng)頁(yè)游戲與網(wǎng)絡(luò)游戲區(qū)別 為何會(huì)出現(xiàn)網(wǎng)頁(yè)游戲 網(wǎng)頁(yè)游戲特征 網(wǎng)頁(yè)游戲其實(shí)就是用瀏覽器玩的游戲 它不用下載客戶端 只要一臺(tái)能上網(wǎng)的電腦就可以進(jìn)行游戲 按是否需要下載客戶端來(lái)劃分是否網(wǎng)頁(yè)游戲 按用戶來(lái)劃分是否網(wǎng)頁(yè)游戲 較認(rèn)可定義 基于瀏覽器 擁有片段游戲時(shí)間的用戶進(jìn)行的網(wǎng)絡(luò)游戲稱(chēng)為網(wǎng)頁(yè)游戲 下面我們主要針對(duì)這類(lèi)游戲架構(gòu)與開(kāi)發(fā)進(jìn)行討論 網(wǎng)頁(yè)游戲可以看作是網(wǎng)站和游戲的結(jié)合體 因此它具備了這兩類(lèi)系統(tǒng)的特性 我們不但可以把網(wǎng)頁(yè)游戲看作是一個(gè)網(wǎng)站 也可以把它看作是一個(gè)網(wǎng)絡(luò)游戲 網(wǎng)站是B S結(jié)構(gòu) 網(wǎng)絡(luò)游戲則是C S結(jié)構(gòu) 網(wǎng)頁(yè)游戲則是這兩者的結(jié)合 網(wǎng)站是B S結(jié)構(gòu) MVC思想 瀏覽器通過(guò)HTTP協(xié)議發(fā)送數(shù)據(jù)請(qǐng)求 由控制器接受請(qǐng)求 通過(guò)路徑委托給數(shù)據(jù)模型處理 模型通過(guò)與邏輯層和持久層的交互 把處理結(jié)果反饋給控制器 控制器根據(jù)結(jié)果組裝視圖 并最終反饋給客戶端瀏覽器 網(wǎng)站服務(wù)器架構(gòu) 控制器 Controller 視圖 View 模型 Model 邏輯層和持久層 1 瀏覽器請(qǐng)求數(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é)繪制游戲世界的實(shí)時(shí)畫(huà)面 服務(wù)器端則負(fù)責(zé)響應(yīng)所有客戶端的連接請(qǐng)求和游戲邏輯處理 并控制所有客戶端的畫(huà)面繪制 客戶端與服務(wù)器通過(guò)網(wǎng)絡(luò)數(shù)據(jù)包交互完成每一步游戲邏輯 網(wǎng)關(guān)服務(wù)器方式 主要職責(zé)是將客戶端通信和游戲服務(wù)器隔離 網(wǎng)關(guān)服務(wù)器只負(fù)責(zé)解析數(shù)據(jù)包 加解密 超時(shí)處理 過(guò)濾錯(cuò)誤包 客戶端只需建立和網(wǎng)關(guān)服務(wù)器的連接即可進(jìn)入游戲 無(wú)需與游戲服務(wù)器直接連接 網(wǎng)關(guān)服務(wù)器分為L(zhǎng)oginGate 登錄網(wǎng)關(guān)服務(wù)器 GameGate 游戲網(wǎng)關(guān)服務(wù)器 網(wǎng)絡(luò)游戲服務(wù)器架構(gòu) 1 LoginGate主要負(fù)責(zé)在玩家登錄時(shí)維護(hù)客戶端與LoginServer之間的網(wǎng)絡(luò)連接與通訊 對(duì)LoginServer和客戶端的通信數(shù)據(jù)進(jìn)行加密 校驗(yàn) 2 LoginServer主要功能驗(yàn)證玩家賬號(hào)是否合法 并生成一個(gè)登錄憑證SESSIONKEY 3 GameGate主要負(fù)責(zé)客戶端與GameServer之間網(wǎng)絡(luò)連接和通訊 對(duì)客戶端請(qǐng)求和發(fā)送數(shù)據(jù)做簡(jiǎn)單分析 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ù)庫(kù)壓力 6 Mserver負(fù)責(zé)一組服務(wù)器中對(duì)多臺(tái)GameServer之間數(shù)據(jù)轉(zhuǎn)發(fā)和廣播 7 Mysql負(fù)責(zé)數(shù)據(jù)持久化存儲(chǔ) 網(wǎng)絡(luò)游戲服務(wù)器架構(gòu) 網(wǎng)絡(luò)游戲服務(wù)器架構(gòu) 服務(wù)器使用Linxu系統(tǒng) NginxWebserver MySQL數(shù)據(jù)庫(kù) PHPFastCGI環(huán)境 PHP做核心功能與邏輯功能開(kāi)發(fā) 聊天和部分實(shí)時(shí)性功能使用C 一個(gè)游戲區(qū)采用1 2臺(tái)服務(wù)器為一組 WebServer DBServer主從 MemcacheServer 邏輯運(yùn)算Server 老區(qū)節(jié)約成本可用1 2臺(tái)服務(wù)器 新區(qū)可用2 4臺(tái)分開(kāi)架構(gòu)根據(jù)游戲區(qū)壓力而定 StaticServer做CDN 所有區(qū)共用 IMServer所有區(qū)共用 網(wǎng)頁(yè)游戲服務(wù)器架構(gòu) 用戶通過(guò)瀏覽器訪問(wèn)服務(wù)器的時(shí)候 首先是訪問(wèn)網(wǎng)頁(yè)服務(wù)器 通過(guò)網(wǎng)頁(yè)服務(wù)器 再去訪問(wèn)游戲邏輯層 通知游戲邏輯層執(zhí)行玩家操作 并從游戲邏輯層里獲得游戲數(shù)據(jù) 或者直接通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)而獲得游戲數(shù)據(jù) 網(wǎng)頁(yè)游戲服務(wù)器架構(gòu) 網(wǎng)頁(yè)服務(wù)器的特點(diǎn)是觸發(fā)執(zhí)行 及當(dāng)有用戶訪問(wèn)網(wǎng)頁(yè)的時(shí)候 才會(huì)執(zhí)行該網(wǎng)頁(yè)的程序代碼 而我們常見(jiàn)的WebGame實(shí)際上是需要24小時(shí)不間斷執(zhí)行的 因此網(wǎng)頁(yè)服務(wù)器的執(zhí)行方式并不適合做游戲 因此我們另外需要一個(gè)應(yīng)用程序來(lái)執(zhí)行這些24小時(shí)不間斷要做的事情 這也就是我們需要增加游戲服務(wù)器設(shè)計(jì)思路的原因 網(wǎng)頁(yè)游戲服務(wù)器架構(gòu) 客戶端瀏覽器 WEB服務(wù)器 邏輯運(yùn)算層 CACHE數(shù)據(jù)層 公共數(shù)據(jù)庫(kù) 玩家數(shù)據(jù)庫(kù) 客戶端瀏覽器 WEB服務(wù)器 邏輯運(yùn)算層 玩家數(shù)據(jù)庫(kù) 戰(zhàn)斗邏輯運(yùn)算服務(wù)器群 服務(wù)端事件系統(tǒng) 什么是事件系統(tǒng)事件系統(tǒng)是整個(gè)WebGame系統(tǒng)里一個(gè)核心的組成部分 它控制著游戲的進(jìn)程 使游戲能夠及時(shí)執(zhí)行到期命令 事件是指游戲里玩家的某個(gè)活動(dòng)指令 它可以分為瞬時(shí)活動(dòng)和非瞬時(shí)活動(dòng) 瞬時(shí)活動(dòng)顧名思義就是在玩家發(fā)出指令的瞬間就能完成的活動(dòng) 玩家從NPC里購(gòu)買(mǎi)一瓶藥水 在玩家發(fā)出這個(gè)指令后 玩家的金錢(qián)減少 藥水增加1瓶 這一切都在玩家發(fā)出指令后瞬間完成 而非瞬時(shí)活動(dòng)則是在玩家發(fā)出某個(gè)指令后一段時(shí)間才會(huì)被執(zhí)行 例如RPG游戲里玩家鼠標(biāo)點(diǎn)擊地圖上某個(gè)怪物進(jìn)行攻擊 這個(gè)攻擊過(guò)程就是一個(gè)非瞬時(shí)過(guò)程 它有了一個(gè)戰(zhàn)斗的過(guò)程 這個(gè)過(guò)程需要消耗一定的時(shí)間 在WebGame里 玩家的很多操作可以看作時(shí)候瞬時(shí)事件和非瞬時(shí)事件的結(jié)合 例如在策略游戲里升級(jí)建筑物 瞬時(shí)事件是村莊資源減少 非瞬時(shí)事件是建筑物建設(shè) 非瞬時(shí)事件的結(jié)果是建筑物等級(jí)上升 比如策略游戲中的軍隊(duì)?wèi)?zhàn)爭(zhēng) 瞬時(shí)事件是當(dāng)前村莊的士兵減少 非瞬時(shí)事件是減少的士兵移動(dòng)到需要攻擊的村莊 結(jié)果是 兩個(gè)村莊開(kāi)打了 服務(wù)端事件系統(tǒng) 事件隊(duì)列前面說(shuō)了瞬時(shí)事件和非瞬時(shí)事件的概念 當(dāng)WebGame24小時(shí)運(yùn)行的時(shí)候 系統(tǒng)就會(huì)產(chǎn)生大量的非瞬時(shí)事件 通常把這些非瞬時(shí)事件統(tǒng)一拿出來(lái) 按事件的結(jié)束時(shí)間進(jìn)行排序 并組成一個(gè)隊(duì)列 事件隊(duì)列 再通過(guò)一個(gè)觸發(fā)器 在事件設(shè)定的結(jié)束時(shí)間到達(dá)的那一刻執(zhí)行對(duì)應(yīng)的事件 服務(wù)端事件系統(tǒng) 實(shí)現(xiàn)方式數(shù)據(jù)庫(kù)建立數(shù)據(jù)庫(kù)內(nèi)存表存放事件隊(duì)列 通常會(huì)存在開(kāi)始時(shí)間 結(jié)束時(shí)間 事件類(lèi)型 事件參數(shù)等數(shù)據(jù) PHP寫(xiě)一個(gè)FOR循環(huán)進(jìn)程查詢事件隊(duì)列內(nèi)存表 如果有到期時(shí)間的隊(duì)列則進(jìn)行處理并刪除該條隊(duì)列數(shù)據(jù) LINUX消息隊(duì)列通過(guò)LINUX消息隊(duì)列存儲(chǔ)游戲事件隊(duì)列 PHP定時(shí)監(jiān)聽(tīng)該消息隊(duì)列中是否有待處理的事件隊(duì)列 進(jìn)行處理并刪除該條隊(duì)列數(shù)據(jù) 服務(wù)端事件系統(tǒng) 數(shù)據(jù)庫(kù)存儲(chǔ)方式與內(nèi)存存儲(chǔ)方式對(duì)比 游戲中的事件隊(duì)列會(huì)比較多 體現(xiàn)在數(shù)量和類(lèi)型上 各種各樣的事件隊(duì)列 SLG游戲中 1 城池建造建筑 2 城池間戰(zhàn)爭(zhēng) 3 城池造兵 4 研究科技 RPG游戲中 1 戰(zhàn)斗打怪或PK 2 連續(xù)打怪掛機(jī) 3 修煉掛機(jī) 4 技能修煉 LINUX消息隊(duì)列存儲(chǔ)的優(yōu)勢(shì)在于降低了PHP進(jìn)程對(duì)數(shù)據(jù)庫(kù)查詢壓力 缺點(diǎn)是服務(wù)器宕機(jī) 內(nèi)存中存儲(chǔ)的消息事件隊(duì)列將會(huì)丟失 RPG打怪事件隊(duì)列丟失影響不大 只是當(dāng)前打的這個(gè)怪物無(wú)效 但是其他類(lèi)型的事件隊(duì)列丟失話有可能影響巨大 還有查詢到期事件的效率問(wèn)題 客戶端玩家發(fā)起戰(zhàn)斗事件指令 服務(wù)端PHP接收到該事件 進(jìn)行戰(zhàn)斗合法性驗(yàn)證后將該事件即相關(guān)運(yùn)算數(shù)據(jù)存儲(chǔ)到LINUX消息隊(duì)列中 PHP戰(zhàn)斗進(jìn)程監(jiān)聽(tīng)LINUX消息隊(duì)列 如果發(fā)現(xiàn)消息隊(duì)列中有戰(zhàn)斗事件 1 PHP運(yùn)算進(jìn)程進(jìn)行運(yùn)算 2 PHP運(yùn)算進(jìn)程在運(yùn)算完之后將運(yùn)算結(jié)果寫(xiě)入玩家戰(zhàn)斗結(jié)果DB內(nèi)存表中存儲(chǔ) 并將戰(zhàn)報(bào)借助IM推送到客戶端進(jìn)行播放 注 戰(zhàn)斗結(jié)果是存DB中還是存入LINUX消息隊(duì)列或MEMCACHE內(nèi)存中 3 PHP戰(zhàn)斗結(jié)束進(jìn)程監(jiān)聽(tīng)數(shù)據(jù)庫(kù)中玩家戰(zhàn)斗結(jié)果表 戰(zhàn)斗結(jié)束時(shí)間到 則刪除該條數(shù)據(jù) 并處理戰(zhàn)斗獎(jiǎng)勵(lì) 4 避免玩家重復(fù)發(fā)起戰(zhàn)斗事件 可以在服務(wù)端通過(guò)玩家ID驗(yàn)證是否有正在戰(zhàn)斗的戰(zhàn)斗隊(duì)列 注 是否需要做服務(wù)端戰(zhàn)斗狀態(tài)驗(yàn)證 怎么做 查詢檢索 RPG戰(zhàn)斗進(jìn)程 綜上分析 服務(wù)端戰(zhàn)斗相關(guān)進(jìn)程會(huì)有兩個(gè)以上 PHP監(jiān)聽(tīng)?wèi)?zhàn)斗事件并運(yùn)算進(jìn)程 PHP監(jiān)聽(tīng)?wèi)?zhàn)斗結(jié)束進(jìn)程 PHP處理戰(zhàn)斗運(yùn)算進(jìn)程可以擴(kuò)展出戰(zhàn)斗運(yùn)算分布式服務(wù)器 校對(duì)玩家機(jī)器和服務(wù)器端的時(shí)間 防止客戶端時(shí)間篡改 更準(zhǔn)確的完成事件交互 客戶端定時(shí)器長(zhǎng)時(shí)間運(yùn)行后和服務(wù)端時(shí)間會(huì)有時(shí)間差 游戲時(shí)間校對(duì) SLG網(wǎng)頁(yè)游戲中常見(jiàn)的建筑建造倒計(jì)時(shí) 策略戰(zhàn)爭(zhēng)隊(duì)伍行軍倒計(jì)時(shí) RPG網(wǎng)頁(yè)游戲中連續(xù)怪物攻擊 掛機(jī)等功能 網(wǎng)頁(yè)游戲中常見(jiàn)的資源儲(chǔ)備按小時(shí)產(chǎn)量時(shí)間遞增功能 數(shù)據(jù)庫(kù)設(shè)計(jì) 對(duì)于任何項(xiàng)目 一個(gè)好的數(shù)據(jù)庫(kù)設(shè)計(jì)極其重要 對(duì)于WEBGAME來(lái)說(shuō)就更是重中之重了 一個(gè)好的數(shù)據(jù)庫(kù)設(shè)計(jì)相當(dāng)于一付好的骨架和脈絡(luò) 當(dāng)你的骨架搭建好 脈絡(luò)理順后 再進(jìn)行游戲功能代碼的時(shí)候?qū)?huì)非常順暢 怎么樣才能設(shè)計(jì)好一款WEBGAME的數(shù)據(jù)庫(kù)呢 在設(shè)計(jì)前因做好如下準(zhǔn)備 1 對(duì)于游戲業(yè)務(wù)邏輯要相當(dāng)清晰 2 多和游戲策劃人員進(jìn)行溝通 充分了解游戲功能需求 3 發(fā)現(xiàn)游戲邏輯部分有矛盾時(shí)及時(shí)向策劃人員反饋 調(diào)整 4 對(duì)于游戲功能先按模塊進(jìn)行劃分 然后再細(xì)化到每張表結(jié)構(gòu) 5 對(duì)于游戲邏輯復(fù)雜的功能點(diǎn)需要反復(fù)推敲 數(shù)據(jù)庫(kù)設(shè)計(jì) 開(kāi)始設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候因注意 表名 字段名規(guī)范化 按游戲功能模塊劃分邏輯相近的表放在一起 合理的區(qū)分游戲配置數(shù)據(jù)表和玩家數(shù)據(jù)表 游戲配置數(shù)據(jù)表和游戲玩家數(shù)據(jù)表在表名上區(qū)分開(kāi) 或則分庫(kù) 合理權(quán)衡表結(jié)構(gòu)的邏輯關(guān)系 性能優(yōu) 易理解 易擴(kuò)展 表字段類(lèi)型長(zhǎng)度設(shè)置合適 能用int就不要用varchar 能用mediumint就不要用int 合理使用數(shù)據(jù)庫(kù)表的縱切與橫切來(lái)降低表壓力 合理規(guī)劃表結(jié)
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆高考英語(yǔ)讀后續(xù)寫(xiě)說(shuō)課稿 追車(chē)人
- 2025SRV汽化煙道熱噴涂合金防護(hù)層施工合同
- 2025民間融資合同范本
- 14《母雞》(說(shuō)課稿)-2023-2024學(xué)年語(yǔ)文四年級(jí)下冊(cè)統(tǒng)編版
- 2025年駕校培訓(xùn)合同范本
- 2025商品購(gòu)銷(xiāo)合同(超市類(lèi))
- 2024年五年級(jí)數(shù)學(xué)下冊(cè) 一 圖形的運(yùn)動(dòng)(二)1.2畫(huà)對(duì)稱(chēng)圖形說(shuō)課稿 冀教版
- 2024-2025學(xué)年高中歷史 第一單元 第一次世界大戰(zhàn) 第2課 慘烈的四年戰(zhàn)事教學(xué)說(shuō)課稿 岳麓版選修3
- 陶土板幕墻施工方案
- 游樂(lè)場(chǎng)植物墻施工方案
- 消防器材與消防設(shè)施的維護(hù)與檢查
- 2024年度碳陶剎車(chē)盤(pán)分析報(bào)告
- 四川省綿陽(yáng)市2025屆高三上學(xué)期第二次診斷性考試語(yǔ)文試題(含答案)
- 2025年1月 浙江首考英語(yǔ)試卷
- 2025年1月廣西2025屆高三調(diào)研考試英語(yǔ)試卷(含答案詳解)
- 2024年中考二輪專(zhuān)題復(fù)習(xí)道德與法治主觀題答題技巧(小論文)之演講稿
- 質(zhì)檢工作計(jì)劃書(shū)2025質(zhì)檢部工作計(jì)劃范文
- 《復(fù)旦大學(xué)》課件
- 《纏論的實(shí)戰(zhàn)技法》課件
- 承包魚(yú)塘維修施工合同范例
- 耶魯綜合抽動(dòng)嚴(yán)重程度量表正式版
評(píng)論
0/150
提交評(píng)論