小編的世界 優質文選 主機
字體大小:
2021年6月16日 -
:
香菜聊遊戲
Author By:某位大佬
前言
《摩爾莊園》前段時間上線, 持續超出市場預期,相信也有不錯的收益。遊戲好玩,所有玩家看到了前端,但是做一款遊戲,離不開後台遊戲服務器的支持,服務器都要做什麼,服務器的架構是什麼,需要哪些技術,一系列的問題有沒有思考過?下面講下作為做服務器開發中需要做的事。
1、常見遊戲模塊
遊戲玩法
遊戲開發中常見的玩法模塊,一般的遊戲都會包含這些玩法
新手引導、任務系統、背包系統、裝備系統、副本、戰鬥系統、活動、商店、充值,競技場,公會系統,好友系統、聊天系統、郵件系統、紅點系統等等
通用模塊
定時job,處理一些定期活動重置,排名發獎勵等
登錄,頂號,離線,斷線重連處理
敏感詞檢測,版署需要
日志系統,記錄玩家行為日志,獎勵日志等
功能開啟關閉,有時候遊戲出問題後(比如刷獎勵)指定功能需要及時關閉
掉落,獎勵隨機規則
防沉迷系統,主要是未成年人保護規則
聊天監控,
錯誤上報機制
道具卡兌換,邀請碼
夏令時問題處理
不停服熱更線上代碼
緊急下架運營活動
合服
運營後台管理系統
發布下架活動
發布公告
發送郵件
遊戲資源凍結
賬號封號,解封,禁言
查詢當前在線人數
2、開發語言與項目構建發布
一般遊戲服務器使用C++,nodejs,photon, JAVA等語言開發,端遊戲一般選擇C++,因為端遊對服務器的性能要求相對比較高一些,語言各有利弊,C++效率高,但是掌握起來難些,JAVA易於掌握,開發效率高,目前對於追求快速上線率的頁遊和手遊來說,JAVA成了一個不錯的選擇,下面主要以JAVA項目來講述服務器各模塊之間如何交互,如何分工合作。項目采用maven框架構建,簡化了項目依賴管理, jar包便於與持續集成工具(jenkins)整合一鍵打包發布svn,一般地,遊戲服務器的架構劃分如下三層:網絡接入層、遊戲邏輯層、數據存儲層
網絡接入層
通信方面使用Netty框架,主要封裝各種物理底層通訊機制,讓應用程序員關注業務邏輯。協議數據使用protobuff, Protobuf有更高的消息壓縮率,時間效率和空間效率都有很大的提升,支持多語言,跨平台
數據緩存以及存儲
市面用的遊戲用到的數據庫大多是下面這幾種:
MySQL,MongoDB, Redis
遊戲服務器都配備了數據庫,是因為遊戲越來越複雜,數據量也越來越多,而且采用數據庫也方便對數據的管理和備份。mysql主要存儲一些遊戲中玩家數據,redis主要存儲一些跨服數據,比如跨服排行榜數據實時排名,或者數據的緩存。
遊戲中玩家數據需要及時響應,及時反饋,一般遊戲中絕大部分的數據是有緩存的,遊戲中玩家產生的數據變化,一般先修改玩家緩存數據,一定時間後,緩存數據定時批量寫入數據庫,長期使用不到的緩存將會被清理,減少內存空間使用。
遊戲邏輯層
服務器各類模塊介紹 :
服務器架構 :
注:platform 和多個遊戲服相連接。
流程說明:
登陸流程
:玩家登陸時首先連接web服,進行登陸,驗證成功後,會將玩家登陸的token 放到Gate服。然後玩家連接Gate服登陸到Game服。
戰鬥流程
:玩家在Game服發起戰鬥,比如匹配戰鬥,則在Game服上匹配,然後送入Fighter 戰鬥服進行戰鬥,此時所有的戰鬥消息從Gate服直接路由到Fighter服,戰鬥結果發送給Game服,然後進行發獎等邏輯
玩家移動流程
:玩家移動消息同步給Scene服,Scene服每一幀同步給所有的玩家
3、JAVA遊戲服務器,需要掌握的技術
Java基礎知識
JavaNIO編程
多線程編程,並發集合的掌握,遊戲中有很多並發事件,安全性尤為重要
熱更新,內存,CPU性能分析
Netty,Mina網絡框架精通一種
Redis,memcache,MongoDB等單用或者組合使用
SQL語言,數據庫:如mysql
數據庫操作,比如mybatis,Hibernate
spring,springMvc主要用於http協議的WEB服務器
tomcat,Nginx
Linux常用的基本命令及shell腳本(服務器發布,啟動關閉)
4、總結
遊戲服務器因為需要面向所有的玩家,所以對服務器的穩定性要求比較高,不能總是出現問題《需要在開發中細心。
策劃的設計經常天馬行空,所以也要考慮到服務器的功能擴展性,爭取在盡量少寫代碼的情況下完成功能。
服務端程序的開發速度很重要,需要考慮模塊的通用性,功能的擴展性,盡量的降低bug可能性,合理設計。
服務端同學任重道遠,需要不斷的學習和積累經驗,才能做好遊戲的支撐。
加油吧,希望各位同學做出自己喜歡的遊戲