分享一個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,登入伺服器(LoginServer)、邏輯伺服器(LogicServer)、戰鬥伺服器(FightServer)、聊天伺服器(ChatServer) 所有的業務伺服器由Daemon守護程序控制啟停,以及所有的維護更新合服等等全部由Daemon自動操作完成,它們的部署不需要人工手動參與。
未完待續。。。