以前想分析一個開源服務器好久了,思前想後,仍是選擇了kbengine。python
KBEngine的服務端底層框架使用c++編寫,遊戲邏輯層使用Python(支持熱更新)。如今服務器大多數是用C++作的,python做腳本也比較多,另一個就是lua。mysql
kbengine底層架構被設計爲多進程分佈式動態負載均衡方案, 理論上只須要不斷擴展硬件就可以不斷增長承載上限,單臺機器的承載上限取決於遊戲邏輯自己的複雜度。這裏對多進程分佈式不是很理解,之後再解答。c++
kbengine主要組件
baseapp,baseappmgr,cellapp,cellappmgr,dbmgr,loginapp,machine。redis
工做組件:sql
bot,guiconsole,interfaces,logger。數據庫
後綴有mgr的組件都是相應的管理器。服務器
數據庫用的是mysql,能夠考慮一下加上redis。網絡
必要組件描述
· loginapp:多線程
登陸驗證、註冊、接入口。可在多臺機器部署多個loginapp進程來負載。 架構
· dbmgr:
高性能多線程的數據存取。默認使用Mysql做爲數據庫。
· baseapp:
客戶端與服務端的交互只能經過loginapp分配的baseapp來完成。定時寫entity的數據到數據庫、baseapp數據相互備份、災難恢復。可在多臺機器部署多個baseapp進程來均衡負載。腳本層一般會選擇在baseapp上實現如:社交系統、廣播聊天、排行、遊戲大廳、等等邏輯系統。
· baseappmgr:
協調全部baseapp的工做,包括baseapp負載均衡處理等。
· cellapp:
處理遊戲與空間和位置有關的邏輯,如:AOI、Navigate、AI、戰鬥等等。可在多臺機器部署多個cellapp進程來動態均衡負載。
· cellappmgr:
負責協調全部cellapp的工做,包括負載均衡處理等。
· machine:
抽象出一個服務端硬件節點(一臺硬件服務器只能存在一個這樣的進程)。主要用途是接收遠程指令處理本機上的組件啓動與關閉, 提供本機上運行組件的接入口以及收集當前機器上的一些信息, 如:CPU、內存等。 這些信息會提供給一些對此比較感興趣的組件。
· client:
客戶端咱們將提供基礎框架,這個框架不包括渲染部分和輸入輸出部分的具體實現, 咱們將提供一個lib文件和一套API接口,開發者能夠選擇使用本身比較適合的圖形渲染引擎與輸入輸出控制部分。Unity3D, HTML5, Cocos2d等技術咱們提供了相關插件,可以快速的和服務端對接。
工具組件描述
· interfaces:
支持快速接入第三方計費、第三方帳號、第三方數據, 快速與運營系統耦合。
· logger:
收集和備份各個組件的運行日誌。
其它組件描述
- |----------|
- | client | x N
- |----------|
- ------------------------|-----|-------------------------------
- |----------| |----------| |----------|
- | loginsrv | x N | basesrv | x N |basesrvmgr| x 1
- |----------| |----------| |----------|
- ------------------------|-----|-------------------------------
- |----------| |----------|
- | cellsrv | x N |cellsrvmgr| x 1
- |----------| |----------|
- ------------------------|-----|-------------------------------
- |----------| |----------|
- | dbmgr | x 1 |interfaces| x 1
- |----------| |----------|
- ------------------------|-----|-------------------------------
- |----------|
- | mysql | x 1
- |----------|
目錄結構:
- |- kbengine (KBE_ROOT 根目錄)
- |- assets (默認的遊戲項目資產庫,你能夠添加新的資產庫經過環境變量綁定)
- |- res (全部資源文件)
- |- spaces (一般存放遊戲場景相關的資源,例如Navmesh)
- |- server (一般放置服務端相關的配置文件)
- |- scripts (全部的遊戲邏輯,Python文件)
- |- base (Base的Python邏輯)
- |- cell (Cell的Python邏輯)
- |- client (Client的Python邏輯)
- |- bots (機器人的Python邏輯,壓力測試)
- |- common (邏輯公共文件夾)
- |- data (遊戲邏輯用到的數據資源)
- |- db (dbmgr擴展腳本)
- |- entity_defs (實體定義與聲明)
- |- interfaces (實體的接口聲明)
- |- server_common (服務端邏輯公共)
- |- user_type (自定義用戶類型目錄)
- |- kbe (引擎目錄)
- |- tools (引擎工具)
- |- server (引擎服務端工具)
- |- guiconsole (可視化的控制檯工具)
- |- install (引擎安裝工具)
- |- pycluster (跨平臺的集羣控制Python腳本工具)
- |- xlsx2py (遊戲數據表導出工具)
- |- src (KBEngine源代碼)
- |- build (makefile公共腳本)
- |- client (客戶端插件和例子目錄)
- |- kbengine_dll (Windows應用程序插件源代碼)
- |- common (公共目錄)
- |- lib (各類模塊源代碼)
- |- client_lib (客戶端底層公共框架)
- |- cstdkbe (KBEngine標準庫)
- |- db_mysql (Mysql存取實現)
- |- dbmgr_lib (數據存取公共接口)
- |- dependencies (依賴庫)
- |- entitydef (實體定義解析模塊)
- |- helper (一些通用的協助性模塊)
- |- math (數學相關)
- |- navigation (2D/3D導航模塊)
- |- network (網絡模塊)
- |- pyscript (腳本插件)
- |- python (python源代碼)
- |- resmgr (資源管理器)
- |- server (服務端公共模塊)
- |- thread (多線程模塊)
- |- xmlplus (xml解析庫)
- |- libs (編譯後的*.lib, *.a文件)
- |- server (服務端app源代碼)
- |- baseapp (baseapp源代碼)
- |- baseappmgr (baseappmgr源代碼)
- |- cellapp (cellapp源代碼)
- |- cellappmgr (cellappmgr源代碼)
- |- dbmgr (dbmgr源代碼)
- |- loginapp (loginapp源代碼)
- |- machine (machine源代碼)
- |- resourcemgr (resourcemgr源代碼)
- |- tools (服務端助手工具)
- |- interfaces (支持第三方計費、第三方帳號等接口)
- |- bots (壓力測試, 虛擬客戶端, 源碼)
- |- guiconsole (可視化的控制檯工具源碼)
- |- message_log (服務端log收集工具源碼)
- |- res (引擎資源目錄)
- |- key (RSA密鑰)
- |- scripts (Python腳本庫)
- |- server (服務端引擎配置)
- |- log4cxx_properties (log4cxx配置)
- |- doc (指南文檔源代碼)
- |- bin (編譯後的可執行文件存放目錄)
- |- client (編譯後的客戶端exe可執行文件存放目錄)
- |- server (編譯後的服務端可執行文件存放目錄)
- |- logs (服務端運行日誌)
- |- tutorial (指南文檔)