不看後悔!揭秘遊戲服務器開發
前言
《摩爾莊園》前段時間上線, 持續超出市場預期,相信也有不錯的收益。遊戲好玩,所有玩傢看到瞭前端,但是做一款遊戲,離不開後臺遊戲服務器的支持,服務器都要做什麼,服務器的架構是什麼,需要哪些技術,一系列的問題有沒有思考過?下面講下作為做服務器開發中需要做的事。
1、常見遊戲模塊
遊戲玩法
遊戲開發中常見的玩法模塊,一般的遊戲都會包含這些玩法
新手引導、任務系統、背包系統、裝備系統、副本、戰鬥系統、活動、商店、充值,競技場,公會系統,好友系統、聊天系統、郵件系統、紅點系統等等
通用模塊
- 定時job,處理一些定期活動重置,排名發獎勵等
- 登錄,頂號,離線,斷線重連處理
- 敏感詞檢測,版署需要
- 日志系統,記錄玩傢行為日志,獎勵日志等
- 功能開啟關閉,有時候遊戲出問題後(比如刷獎勵)指定功能需要及時關閉
- 掉落,獎勵隨機規則
- 防沉迷系統,主要是未成年人保護規則
- 聊天監控,
- 錯誤上報機制
- 道具卡兌換,邀請碼
- 夏令時問題處理
- 不停服熱更線上代碼
- 緊急下傢運營活動
- 合服
運營後臺管理系統
- 發佈下架活動
- 發佈公告
- 發送郵件
- 遊戲資源凍結
- 賬號封號,解封,禁言
- 查詢當前在線人數
2、開發語言與項目構建發佈
一般遊戲服務器使用C++,nodejs,photon, JAVA等語言開發,端遊戲一般選擇C++,因為端遊對服務器的性能要求相對比較高一些,語言各有利弊,C++效率高,但是掌握度難些,JAVA易於掌握,開發效率搞,目前對於追求快速上線率的頁遊和手遊來說,JAVA成瞭一個不錯的選擇,下面主要以JAVA項目來講述服務器各模塊之間如何交互,如何分工合作。項目采用maven框架構建,簡化瞭項目依賴管理, jar包便於與持續集成工具(jenkins)整合一鍵打包發佈svn,一般地,遊戲服務器的架構劃分如下三層:網絡接入層、遊戲邏輯層、數據存儲層
網絡接入層
通信方面使用Netty框架,主要封裝各種物理底層通訊機制,讓應用程序員關註業務邏輯。協議數據使用protobuff, Protobuf有更高的消息壓縮率,時間效率和空間效率都有很大的提升,支持多語言,跨平臺
數據緩存以及存儲
市面用的遊戲用到的數據庫大多是下面這幾種:
MySQL,MongoDB, Redis
遊戲服務器都配備瞭數據庫,是因為遊戲越來越復雜,數據量也越來越多,而且采用數據庫也方便對數據的管理和備份。mysql主要存儲一些遊戲中玩傢數據,redis主要存儲一些跨服數據,比如跨服排行榜數據實時排名,或者數據的緩存。
遊戲中玩傢數據需要及時響應,及時反饋,一般遊戲中絕大部分的數據是有緩存的,遊戲中玩傢產生的數據變化,一般先修改玩傢緩存數據,一定時間後,緩存數據定時批量寫入數據庫,長期使用不到的緩存將會被清理,減少內存空間使用。
遊戲邏輯層
服務器各類模塊介紹 :
模塊名 | 功能類型 | 功能說明 |
---|---|---|
yyds-all | maven父功能 | 管理模塊關系,maven的一些配置 |
yyds-core | 公共模塊 | 遊戲業務無關的公共代碼。 |
yyds-common | 基礎模塊 | 遊戲業務相關的公共代碼。 |
yyds-game | 遊戲服 | 處理遊戲業務邏輯(遊戲和聊天業務,聊天消息通過網關進行轉發) |
yyds-gate | 網關服 | 負責維護客戶端連接,轉發消息。 |
yyds-scene | 場景服 | 處理地圖相關業務(移動、視野同步) |
yyds-web | WEB服 | 登錄、創角、充值、GM命令、運營後臺操作入口。 |
yyds-platform | 跨服 | 遊戲服之間的消息中轉,跨服類玩法。 |
yyds-fighter | 戰鬥服 | 處理戰鬥邏輯 |
服務器架構 :
註: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可能性,合理設計。
服務端同學任重道遠,需要不斷的學習和積累經驗,才能做好遊戲的支撐。
加油吧,希望各位同學做出自己喜歡的遊戲,這篇文章就到這裡瞭,希望能幫到你,請多多關註WalkonNet的更多內容!
推薦閱讀:
- 基於Java SSM框架開發圖書借閱系統源代碼
- java中mybatis和hibernate的用法總結
- MongoDB客戶端工具NoSQL Manager for MongoDB介紹
- Java中Mybatis,SpringMVC,Spring的介紹及聯系
- SpringBoot連接使用PostgreSql數據庫的方法