淺談遊戲服務器-》功能模塊上來看(一)

    遊戲服務器在網遊上的作用不容考慮,遊戲能做大到什麼程度,還是有很大的依靠的,這篇文章先從功能模塊的角度來談一個完善的遊戲服務器需要實現哪。

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

兩點了,寫不下去了,標記個一 明天來寫二,看哪裏寫的不對的說下,我改正,明天再擴充的寫下,然後遊戲世界的操作
http://www.cppblog.com/ziyebuboka/
發佈了49 篇原創文章 · 獲贊 27 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章