在開發一款游戲項目時,在立項時我們往往會考慮或者糾結很多,比如:
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.
未完待續。。。