分享一個C++與Python開發的中小型通用游戲服務端框架(跨平台,開源,適合MMORPG游戲)


在開發一款游戲項目時,在立項時我們往往會考慮或者糾結很多,比如:

  1,對於開發來說:服務端和客戶端應該選擇什么語言?用什么協議通信才更效率?協議后期如何維護?Socket是用長連接還是短連接?TCP還是UDP?客戶端資源、配置表、代碼如何進行熱更新?等等。

  2,對於策划來說:配置表使用什么比較方便?使用excel?又或者自行開發工具進行導出配置供程序使用?

  3,對於運維來說:服務端如何高度自動化將人力成本節省到最小?如何自動維護?自動合服?能不能做到維護完全不需要人工參與?在幾十台?幾百台服務器的前提下如何對服務器進行批量更新?能不能定時操作?服務器的日志查看麻煩嗎?能不能通過后台工具直接查看?如果線上服務器代碼出現問題,有沒有手段可以直接hotpatch?

  4,對於運營來說:服務端活動能不能直接在后台工具里配?后台能不能查看一系列的精分數據?能不能直接查看服務器相關數據?能不能發郵件,發公告?對玩家封號禁言等等。

 

所以我今天開源的框架就是為了解決上面的所有問題,為了大家在開發一個項目時能夠少走彎路,將精力全部放在開發游戲業務上面,而不用在上面這些事情耗費太多精力,提升項目的開發效率。

源代碼SVN地址:  svn://47.107.60.212:18081

QQ交流群:162424313

這是我本人通過多年的工作經驗積累下來的一個框架,目前只在一個線上項目運行過,可能會存在一些隱藏的bug,所以還希望大家多多包涵,有什么問題可以及時進群與我溝通,或者在下面留言。

由於沒有太多時間寫文檔,我在下面對框架做一個簡單的介紹,寫的比較粗曠,有更多的疑問歡迎進群討論。

 

框架涉及的語言以及依賴

  服務端

    1,C++11  核心的底層

    2,Python 3.6  跟C++高度集成,大部分的一些框架邏輯在Python層完成

  客戶端(Unity)

    1,C#  網絡通信及協議使用的C#(C#的協議不支持熱更新)

    2,Lua(XLua)    協議部分除了支持C#之外也支持lua,使用的是騰訊開源項目XLua(XLua協議和代碼支持熱更新)

  引用的開源項目

    1,boost_1_65_1      C++庫所依賴

    2,poco-1.7.9-all      C++庫所依賴

    3,openssl-1.0.2o      SSL加密通信時所依賴

    2,mongo-cxx-driver-r3.2.0  mongodb C++版接口

    3,mongo-c-driver-1.9.5    mongodb C版接口

  

  Windows下編譯需要使用VS2015 Update2

    

 

下面是精簡版的架構圖

  

 

上圖中除了管理服務器外所有服務器都支持水平擴展。

 

框架所包含的角色:

1,網關服務器(GateServer)  實現了一個類似Redis服務器中的訂閱與發布功能,所有其他服務器都會與之連接

2,守護進程(Daemon)    每一個物理機器上面都會部署一個守護進程,然后由這個守護進程來管理所有其他業務邏輯的生命周期。

  舉個例子,比如說現在在騰訊雲買了100台物理服務器,你只需要做的就是在每一台服務器上面部署一個守護進程,然后把每個守護進程的端口和IP都記錄下來,全部都錄入到后台工具里面,

  從此以后你比如要在這100台物理服務器中運行更多的業務邏輯服務器時(跑一個進程就是一個區,一般好一點的機器一台可以跑10個以上的進程),比如我一台跑10個區,100台就是1000個區,這1000個區的維護全部可以通過后台管理工具進行批量化操作。

3,管理服務器(AdminServer)  一個集群里面唯一的單點服務器,負責接受后台工具的指令 以及相關運營 運維功能全部在這里。該服務器實際上不會接受用戶的連接,只會接受內部管理工具的連接,所以實際上是沒有任何壓力的。

4,后台管理工具(AdminTools)  所有服務器啟停的控制,定時任務下發,服務器的代碼版本更新,維護,定時維護,合服,渠道管理,平台管理,服務器的日志查看,精分數據曲線圖表,發送全服郵件或者公告,活動的配置。等等

5,配置文件編輯工具  一個單獨的配置文件生成和導出工具,用於接收策划配置的Excel配置表,然后轉換成內部格式 導出相關的C++、Python、C#、Lua版本的數據結構,和二進制的配置文件數據。

6,協議生成工具  用於將協議的源文件導出成程序可識別的數據結構支持C++、Python、C#、LuA (類似Protobuf導出pb的功能)。

7,登錄服務器(LoginServer)、邏輯服務器(LogicServer)、戰斗服務器(FightServer)、聊天服務器(ChatServer)  所有的業務服務器由Daemon守護進程控制啟停,以及所有的維護更新合服等等全部由Daemon自動操作完成,它們的部署不需要人工手動參與。

 

所有服務器之間,服務器和客戶端之間,全部采用Tcp長連接,自定義協議,協議用Python描述

關於更多的協議編寫規范請看 這里

 

 

Windows上的編譯:

1,安裝Python3.7.0 64位版本

2,使用pip 安裝PyQt5、rsa、psutil、requests、pymongo

3,從SVN將代碼下載代碼(地址在上面)

4,修改 trunk\3rdParty\FastNet\Builds\Proj.Win64\FastNet.props   中的  <PythonRootDir>C:/Python/Python37/</PythonRootDir>  將其中的C:/Python/Python37/換成你自己的安裝路徑

然后就可以通過VS2015打開Solution.sln進行編譯了。注意VS2015 需要安裝 Update2.

 

 

未完待續。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM