本文小弟淺談,新手看,老手拍磚,轉(zhuǎn)載請注明出處http://www.shnenglu.com/ziyebuboka/
游戲服務(wù)器在網(wǎng)游上的作用不容考慮,游戲能做大到什么程度,還是有很大的依靠的,這篇文章先從功能模塊的角度來談一個完善的游戲服務(wù)器需要實現(xiàn)哪。
一:游戲服務(wù)器的作用:連接各個網(wǎng)游客戶端,實現(xiàn)各客戶端的通信,連接,數(shù)據(jù)操作
二:先從大分類上來:游戲服務(wù)器按一般架構(gòu)來說具備1
1:登陸驗證注冊和賬號有關(guān)的所有操作的服務(wù)器 我們簡稱他為registerserver
2:游戲邏輯操作服務(wù)器 我們簡稱他為gameserver
不用細(xì)說大家也明白了,說一個玩家登陸進入游戲世界的流程:玩家打開游戲客戶端(這之前會有更新操作,不過這只是連接更新服務(wù)器的一個文件比對和下載過程,我們不將他列為游戲服務(wù)器之內(nèi))說到這里朋友會發(fā)現(xiàn)游戲登陸上目前有兩大類,一類是先選服務(wù)器后輸入賬號 一類是先輸入賬號后選服務(wù)器,這里說下區(qū)別
先選服務(wù)器后輸入賬號的一般來說都是將registerserver和gameserver配對,就是你先選擇服務(wù)器,而后你連接上的就是此服務(wù)器的registerserver,通過此registerserver來進行賬號驗證等等。另一類先輸入賬號的,無非是先制定一個中心registerserver(或者是隨機一個,因為register有時候會弄好多個由運維配置來做動態(tài)均衡),賬號驗證成功后再顯示服務(wù)器列表,然后玩家選擇了服務(wù)器后,則從指定服registerserver去數(shù)據(jù)庫查詢玩家此服的角色列表(當(dāng)然了,這里如果非有人的服務(wù)器是做成查詢角色列表就從gameserver走的流程,我也沒意見)。返回后,客戶端進入角色選擇界面,客戶端與registerserver斷鏈,玩家選擇角色,與gameserver連接,去數(shù)據(jù)庫提取角色,注冊進入游戲服游戲世界,反饋角色信息給客戶端,客戶端進入游戲世界。然后消息發(fā)送過來發(fā)送過去的開始了。。。。。。
上面說的是針對一個普通的一對一架構(gòu)的服務(wù)器所有的一個登陸流程,看到這里,朋友們應(yīng)該對registerserver和gameserver的基本功能有所了解了。一個是登陸驗證用(垃圾點的小公司沒有注冊賬號的主頁的話也會通過這個在游戲里直接注冊賬號。。。)到登陸進入游戲世界的過程。
再稍微高級點的就是加個聊天服務(wù)器了,因為聊天這個功能實在是太耗性能了,特別那啥的那公聊,你發(fā)個一句,服務(wù)器得有多少人就發(fā)多少回。。。
打個比方你發(fā)一句話 50個字那就是100 一個服有那么個幾K人的話,就打比方5K人 一句話發(fā)送就得是一個全服人口大FOR循環(huán),網(wǎng)絡(luò)還得消耗掉5000*100字節(jié)
所以你看各游戲公聊國聊那啥的都時間限制要不就收費,他扛不住啊。
所以這個地方就出來個性能優(yōu)化方案了,加個聊天服務(wù)器,也就是玩家在登陸成功與gameserver連接成功的同時要與聊天服務(wù)器連接成功,聊天服務(wù)器有個全服在線角色表,一個大FOR循環(huán)和那啥的5000*100就讓他來發(fā)吧,至少對gameserver沒影響了。
好了,一個普通服務(wù)器的基本介紹就說到這里,讀者也應(yīng)該有個基本了解了,具體架構(gòu)上的就不細(xì)說了,趕明換個帖子發(fā)。這里還是接標(biāo)題從功能上來分析服務(wù)器。
這里就只分析游戲服務(wù)器了,registerserver就不考慮了。
一個游戲服務(wù)器他的作用在與,所有的游戲數(shù)據(jù)操作都將在這里完成,我們將只將客戶端作為顯示和一個數(shù)據(jù)的完善緩存。一切的操作都必須在游戲服務(wù)器的驗證之后才能完成。
功能模塊分類(本人之間,有多余或遺漏的,歡迎補充):
1:腳本模塊
2:屬性模塊
3:網(wǎng)絡(luò)模塊
4:數(shù)據(jù)庫模塊
5:日志模塊
以上所列的為一個完善的游戲服務(wù)器所必須實現(xiàn)的功能 下面一一來說
1:腳本模塊
沒有腳本模塊,腳本策劃就得喝西北風(fēng),LUA首選很不錯。
具體LUA的學(xué)習(xí),推薦LUA程序設(shè)計,這玩意不用深究,會即可。
程序員要寫好幾個CPP,完成的功能是---》在C++中任意的調(diào)用LUA函數(shù)(或是執(zhí)行一個LUA文件),在LUA中任意調(diào)用你提供給腳本策劃的C++函數(shù)接口,如此功能實現(xiàn)后,哈哈,程序員們,你們的工作負(fù)擔(dān)就輕了,很大一部分的邏輯編程將交給策劃們?nèi)ネ瓿闪?br> 舉例:程序?qū)崿F(xiàn)一個接口例如 say(LPCSTR szSay) ,則策劃可調(diào)用此接口 function mySay() say("歡迎來到游戲世界") end,就可
可用到的地方:具體物品的使用邏輯,特殊任務(wù)的邏輯,活動邏輯,特殊NPC邏輯等等等等,只要你愿意,跑步都可用LUA來
比如C++里可實現(xiàn)一籃子接口:AddItem 增加個物品 ChangeMap 跳地圖 甚至是AddLevel等等 而由LUA調(diào)用此類接口,而后就是C++里做些操作,比如玩家點擊物品就是調(diào)用相應(yīng)物品的腳本:例:點擊 血瓶 調(diào)用 LUA 的血瓶腳本,執(zhí)行LUA函數(shù)調(diào)用AddHp
腳本模塊很重要,可極大的方便工作,還有調(diào)試和維護,因為修改腳本,服務(wù)器是不用重編譯的,則意味著可在調(diào)試中隨意修改,甚至可在運營過程中隨意修改某物品功能 某任務(wù) 某活動。。。,只需C++到LUA,把這個LUA函數(shù)RELOAD下即可
具體的游戲應(yīng)用腳本的例子 大家網(wǎng)上找找吧 一坨子開源的。
2:屬性模塊:呵呵,不知道我取這個名字OK不OK,我也覺得不是很合適,大家又更好的命名沒?
NPC的基本屬性配置,物品的基本屬性配置,叫屬性配置可能更合適點,意思就是你要提供一個模塊供策劃可填入各個屬性配置,甚至是GUI的配置又或者是任務(wù)配置。對于這個,我推薦使用EXCEL表格。
例如:NPC的表格至少包括 NPC名字 模型編號 血量 藍量 移動速度 AI 等等,而后有策劃往里面隨意填配置 這里比如AI就是一個對應(yīng)的腳本文件
這個讀取表格由程序員實現(xiàn),功能是要求要自由化,不然的話 策劃加一條 你咋辦,不至于從讀取開始你的代碼都得改吧,肯定能做到直接在NPCPROPERTY結(jié)構(gòu)體里直接加一條和表格新加的對應(yīng)就OK了。
如果OK得話,最好再提供個編輯工具給策劃,任務(wù)的相同模式也可由此來實現(xiàn):任務(wù)描述 任務(wù)要求 對話1 對話2 對話3 獎勵1 獎勵2 獎勵3
物品:物品名字 模型編號 職業(yè) 等級 攻擊 腳本
不然你總不至于傻到認(rèn)為這些都是寫代碼里的吧。也可能有人想使用XML 隨便了 不過我這里不想用XML 為啥 EXCEL清晰啊 就一行條目
這個模塊是數(shù)值策劃 任務(wù)策劃的天下
3:網(wǎng)絡(luò)模快:這個沒啥好說的 一個基本功能,游戲世界都是在這之上也能成型,做好鏈接維護,收發(fā)消息
4:數(shù)據(jù)庫模塊:對數(shù)據(jù)的保存 其實這里我熱衷于使用工廠模式,本地調(diào)試服務(wù)器具體邏輯用本地文檔方式,上測試服上外網(wǎng)則用數(shù)據(jù)庫,所以這里叫數(shù)據(jù)操作模塊比較妥當(dāng)點,就是玩家保存數(shù)據(jù),保存幫派啦 等等世界信息的具體操作,這個很重要
5:日志模塊:我將此日志模塊分為兩大類,一類是游戲服務(wù)器調(diào)試維護用日志,一類是游戲運營用日志,可選擇使用本地文檔或是數(shù)據(jù)庫模式記錄
調(diào)試維護日志沒啥好說的,運營日志說說,是給客服提供的,誰消費了什么 交易流向 物品流向 等等的記錄 GM操作的記錄等等 比如萬一某玩家裝備被盜了,則可通過此來證明。
兩點了,寫不下去了,標(biāo)記個一 明天來寫二,看哪里寫的不對的說下,我改正,明天再擴充的寫下,然后游戲世界的操作
http://www.shnenglu.com/ziyebuboka/