Merge branch ‘main’ of github.com:ZHOURUIH/MyServerFramework
一个配套 MyFramework Unity 客户端框架 使用的 C++ 游戏服务器框架。
项目地址:
https://github.com/ZHOURUIH/MyServerFramework
配套客户端框架:
https://github.com/ZHOURUIH/MyFramework
MyServerFramework 是一个偏传统游戏服务器开发思路的 C++ 服务端框架。
它不是单纯的 Socket Demo,也不是只用于演示网络连接的小项目,而是围绕实际游戏项目开发流程整理出来的一套服务器框架,主要用于配合 Unity 客户端框架 MyFramework 使用。
框架重点关注:
MyFramework 是 Unity 客户端框架。
MyServerFramework 是与它配套的 C++ 服务器框架。
两者并不是完全割裂的两个项目,而是围绕同一套游戏开发流程设计的客户端和服务器工程。
主要配套点包括:
适合希望研究 Unity 客户端 + C++ 服务器配套开发流程 的项目。
框架主体使用 C++ 编写,整体代码风格偏传统游戏服务器和引擎开发思路。
主要目标不是追求最少代码,而是让服务器逻辑具备明确的模块划分、生命周期和可维护性。
框架包含多种网络通信模块:
对应目录:
MyServerFramework_Frame/Frame/Net ├── TCPServer ├── TCPClient ├── UDPServer ├── WebSocketServer └── Http
其中 TCP 通信用于常规客户端长连接。
UDP 可用于实时性更高的通信场景。
WebSocket 可用于 Web 平台或需要 WebSocket 接入的客户端。
HTTP 可用于短连接请求、后台接口或辅助服务。
仓库中包含协议定义文件:
#自动生成代码/PacketCS.txt #自动生成代码/PacketSC.txt #自动生成代码/PacketStruct.txt
协议文件中定义客户端到服务器、服务器到客户端以及公共结构体。
例如:
CSServerCheckPing CSLogin CSAttack SCServerCheckPing SCCharacterFullGameData SCGetItemTip SCAttack NetStructItemInfo
协议生成工具可以根据这些配置生成:
这样可以减少客户端和服务器协议不一致的问题。
框架内置 MySQL 访问相关封装。
相关目录:
MyServerFramework_Frame/Frame/DataBase/MySQL
包含:
仓库中也包含 MySQL 表结构定义示例:
#文档/micro_legend.sql
当前 Demo 中包含账号表 account,用于基础登录测试。
account
框架内置 SQLite 读取支持。
MyServerFramework_Frame/Frame/DataBase/SQLite
SQLite 主要用于读取配置类数据,配合配置表生成代码使用。
框架内置 Excel / 配置表管理模块。
MyServerFramework_Frame/Frame/DataBase/Excel
项目层对应注册代码:
MyServerFramework/Game/DataBase/Excel/ExcelRegister.cpp MyServerFramework/Game/DataBase/Excel/ExcelRegister.h
配置表系统用于和客户端保持一致的数据结构,适合生成客户端和服务器两端的配置读取代码。
框架包含命令系统,用于封装具有完整逻辑意义的操作。
MyServerFramework_Frame/Frame/CommandSystem
命令系统可以用于:
框架包含事件系统。
MyServerFramework_Frame/Frame/EventSystem
事件系统用于模块之间的通知和解耦,避免所有逻辑直接互相调用。
框架包含大量对象池和临时内存管理工具。
MyServerFramework_Frame/Frame/ClassPool
框架也包含内存追踪相关模块:
MyServerFramework_Frame/Frame/Memory
这些设计主要用于减少频繁 new/delete 带来的开销,并让服务器长期运行时的内存行为更可控。
框架包含基础角色、移动对象和组件系统。
MyServerFramework_Frame/Frame/Character MyServerFramework_Frame/Frame/Component
项目层角色代码位于:
MyServerFramework/Game/Character
当前 Demo 中包含:
适合作为游戏角色、玩家对象和服务器实体系统的基础。
框架包含状态机和部分 AI 相关基础组件。
MyServerFramework_Frame/Frame/StateManager MyServerFramework_Frame/Frame/Character/Component
包括:
可用于角色状态、怪物行为、AI 决策等服务器逻辑。
框架包含时间任务系统和时间点系统。
MyServerFramework_Frame/Frame/TimeTaskSystem MyServerFramework_Frame/Frame/TimePointSystem
可用于:
框架包含日志系统。
MyServerFramework_Frame/Frame/Log
用于服务器运行日志、错误定位和调试输出。
框架包含大量单元测试代码。
MyServerFramework_Frame/Frame/UnitTest
覆盖内容包括:
单元测试用于保证基础工具函数和核心模块长期稳定。
MyServerFramework ├── MyServerFramework │ └── Game │ ├── Character │ ├── Common │ ├── Component │ ├── Config │ ├── DataBase │ ├── Game │ ├── Socket │ └── Utility │ ├── MyServerFramework_Frame │ └── Frame │ ├── Character │ ├── ClassPool │ ├── CommandSystem │ ├── Common │ ├── Component │ ├── Config │ ├── DataBase │ ├── Dependency │ ├── EventSystem │ ├── Factory │ ├── InputSystem │ ├── KeyframeManager │ ├── Log │ ├── Math │ ├── Memory │ ├── Net │ ├── Param │ ├── Serialize │ ├── ServerFramework │ ├── StateManager │ ├── Thread │ ├── Ticker │ ├── TimePointSystem │ ├── TimeTaskSystem │ ├── UnitTest │ └── Utility │ ├── ToolProject │ ├── GenerateMakeLists │ └── GenerateVSProject │ ├── #自动生成代码 │ ├── PacketCS.txt │ ├── PacketSC.txt │ ├── PacketStruct.txt │ ├── MySQL.txt │ └── 自动生成代码.exe │ ├── #文档 │ ├── 环境安装说明.txt │ ├── linux编译.txt │ ├── linux命令.txt │ ├── linux错误解决日志.txt │ └── micro_legend.sql │ ├── lib ├── DLL ├── media ├── CMakeLists.txt └── MyServerFramework.sln
安装 Visual Studio。
安装 OpenSSL。
可从以下地址下载安装 Win64 OpenSSL:
https://slproweb.com/products/Win32OpenSSL.html
安装后添加环境变量:
OPENSSL_ROOT_DIR=C:\Program Files\OpenSSL-Win64
可从以下地址下载安装 MySQL Installer:
https://dev.mysql.com/downloads/installer/
MYSQL_ROOT=C:\Program Files\MySQL\MySQL Server 8.0
MyServerFramework.sln
编译并运行服务器。
启动配套 Unity 客户端工程:
客户端启动后即可连接服务器进行基础测试。
仓库中包含 CMakeLists 文件,可部署到 Linux 编译。
根目录:
CMakeLists.txt
包含两个子工程:
MyServerFramework_Frame MyServerFramework
Linux 环境需要安装相关依赖,例如:
mysql libevent openssl libssl zlib cmake build-essential
常见依赖安装示例:
sudo apt-get update sudo apt-get install -y build-essential sudo apt-get install -y cmake sudo apt-get install -y zlib1g-dev sudo apt-get install -y libssl-dev sudo apt-get install -y mysql-server sudo apt-get install -y libmysqlclient-dev
编译示例:
mkdir build cd build cmake .. make
如果修改了工程中的文件结构,可以使用仓库提供的工具更新 CMakeLists。
仓库中包含自动生成 CMakeLists 的工具:
GenerateMakeLists.exe GenerateMakeLists_Config.txt
用于在 Windows 上修改完代码后,自动更新 CMakeLists。
适合以下情况:
这样可以减少手动维护 Linux 编译文件的成本。
仓库中包含 Visual Studio 工程生成工具:
#自动生成代码/生成VS工程.exe #自动生成代码/GenerateVSProject_Config.txt
用于根据配置自动更新 Visual Studio 工程文件。
适合在项目文件增删较多时保持工程文件同步。
协议定义位于:
其中:
PacketCS.txt
定义客户端发送到服务器的消息。
PacketSC.txt
定义服务器发送到客户端的消息。
PacketStruct.txt
定义客户端和服务器共用的网络结构体。
生成工具:
#自动生成代码/自动生成代码.exe
生成后会更新服务器和客户端对应的协议代码。
MySQL 表结构定义位于:
#自动生成代码/MySQL.txt
示例:
Account:account { string Account; string Password; llong CharacterGUID; index: Account }
说明:
Account
llong ID
index
生成后会生成对应 MySQL 数据类和注册代码。
客户端到服务器:
CSCheckPacketVersion CSServerCheckPing CSAttack CSLogin
服务器到客户端:
SCCheckPacketVersion SCServerCheckPing SCCharacterFullGameData SCGetItemTip SCAttack
公共结构:
NetStructItemInfo
这些消息主要用于演示:
仓库文档中包含基础 MySQL 表结构:
当前示例包含账号表:
字段包括:
ID Account Password CharacterGUID
用于基础账号登录测试。
服务器框架倾向于显式生命周期和显式调度。
系统初始化、更新、销毁都由框架统一管理,减少隐藏流程。
框架不仅提供运行时模块,也提供协议生成、MySQL 生成、工程生成、CMakeLists 生成等工具。
目标是减少长期项目中的重复劳动。
服务器框架与 Unity 客户端框架配套设计。
协议、配置、消息结构尽量通过工具生成,减少两端手写导致的不一致。
框架中包含对象池、日志系统、单元测试、工程检查思路和大量基础工具,目标是支持长期运行和持续迭代。
推荐同时查看客户端仓库:
客户端框架包含:
服务器仓库和客户端仓库配合后,可以形成一套完整的开发流程:
协议配置 ↓ 生成客户端消息代码 ↓ 生成服务器消息代码 ↓ 客户端发送请求 ↓ 服务器处理逻辑 ↓ 服务器返回消息 ↓ 客户端刷新表现
配置表流程:
CSV 配置表 ↓ 配置表工具链检查 ↓ 生成客户端配置代码 ↓ 生成服务器配置代码 ↓ 客户端和服务器共用同一套配置结构
仓库中包含部分环境和部署文档:
#文档/环境安装说明.txt #文档/linux编译.txt #文档/linux命令.txt #文档/linux错误解决日志.txt #文档/micro_legend.sql
后续会继续补充:
MIT
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MyServerFramework
一个配套 MyFramework Unity 客户端框架 使用的 C++ 游戏服务器框架。
项目地址:
https://github.com/ZHOURUIH/MyServerFramework
配套客户端框架:
https://github.com/ZHOURUIH/MyFramework
项目定位
MyServerFramework 是一个偏传统游戏服务器开发思路的 C++ 服务端框架。
它不是单纯的 Socket Demo,也不是只用于演示网络连接的小项目,而是围绕实际游戏项目开发流程整理出来的一套服务器框架,主要用于配合 Unity 客户端框架 MyFramework 使用。
框架重点关注:
与 MyFramework 的关系
MyFramework 是 Unity 客户端框架。
MyServerFramework 是与它配套的 C++ 服务器框架。
两者并不是完全割裂的两个项目,而是围绕同一套游戏开发流程设计的客户端和服务器工程。
主要配套点包括:
适合希望研究 Unity 客户端 + C++ 服务器配套开发流程 的项目。
核心特点
1. C++ 游戏服务器框架
框架主体使用 C++ 编写,整体代码风格偏传统游戏服务器和引擎开发思路。
主要目标不是追求最少代码,而是让服务器逻辑具备明确的模块划分、生命周期和可维护性。
2. 多种网络通信方式
框架包含多种网络通信模块:
对应目录:
其中 TCP 通信用于常规客户端长连接。
UDP 可用于实时性更高的通信场景。
WebSocket 可用于 Web 平台或需要 WebSocket 接入的客户端。
HTTP 可用于短连接请求、后台接口或辅助服务。
3. 客户端 / 服务器协议代码生成
仓库中包含协议定义文件:
协议文件中定义客户端到服务器、服务器到客户端以及公共结构体。
例如:
协议生成工具可以根据这些配置生成:
这样可以减少客户端和服务器协议不一致的问题。
4. MySQL 数据库支持
框架内置 MySQL 访问相关封装。
相关目录:
包含:
仓库中也包含 MySQL 表结构定义示例:
当前 Demo 中包含账号表
account,用于基础登录测试。5. SQLite 配置数据支持
框架内置 SQLite 读取支持。
相关目录:
包含:
SQLite 主要用于读取配置类数据,配合配置表生成代码使用。
6. 配置表系统
框架内置 Excel / 配置表管理模块。
相关目录:
包含:
项目层对应注册代码:
配置表系统用于和客户端保持一致的数据结构,适合生成客户端和服务器两端的配置读取代码。
7. 命令系统
框架包含命令系统,用于封装具有完整逻辑意义的操作。
相关目录:
包含:
命令系统可以用于:
8. 事件系统
框架包含事件系统。
相关目录:
包含:
事件系统用于模块之间的通知和解耦,避免所有逻辑直接互相调用。
9. 对象池与内存控制
框架包含大量对象池和临时内存管理工具。
相关目录:
包含:
框架也包含内存追踪相关模块:
这些设计主要用于减少频繁 new/delete 带来的开销,并让服务器长期运行时的内存行为更可控。
10. 角色与组件系统
框架包含基础角色、移动对象和组件系统。
相关目录:
项目层角色代码位于:
当前 Demo 中包含:
适合作为游戏角色、玩家对象和服务器实体系统的基础。
11. 状态机与 AI 基础
框架包含状态机和部分 AI 相关基础组件。
相关目录:
包括:
可用于角色状态、怪物行为、AI 决策等服务器逻辑。
12. 定时任务与时间点系统
框架包含时间任务系统和时间点系统。
相关目录:
可用于:
13. 日志系统
框架包含日志系统。
相关目录:
包含:
用于服务器运行日志、错误定位和调试输出。
14. 单元测试
框架包含大量单元测试代码。
相关目录:
覆盖内容包括:
单元测试用于保证基础工具函数和核心模块长期稳定。
功能概览
目录结构
快速开始
Windows
安装 Visual Studio。
安装 OpenSSL。
可从以下地址下载安装 Win64 OpenSSL:
安装后添加环境变量:
可从以下地址下载安装 MySQL Installer:
安装后添加环境变量:
编译并运行服务器。
启动配套 Unity 客户端工程:
客户端启动后即可连接服务器进行基础测试。
Linux 编译
仓库中包含 CMakeLists 文件,可部署到 Linux 编译。
根目录:
包含两个子工程:
Linux 环境需要安装相关依赖,例如:
常见依赖安装示例:
编译示例:
如果修改了工程中的文件结构,可以使用仓库提供的工具更新 CMakeLists。
自动生成 CMakeLists
仓库中包含自动生成 CMakeLists 的工具:
用于在 Windows 上修改完代码后,自动更新 CMakeLists。
适合以下情况:
这样可以减少手动维护 Linux 编译文件的成本。
自动生成 Visual Studio 工程
仓库中包含 Visual Studio 工程生成工具:
用于根据配置自动更新 Visual Studio 工程文件。
适合在项目文件增删较多时保持工程文件同步。
协议生成说明
协议定义位于:
其中:
定义客户端发送到服务器的消息。
定义服务器发送到客户端的消息。
定义客户端和服务器共用的网络结构体。
生成工具:
生成后会更新服务器和客户端对应的协议代码。
MySQL 生成说明
MySQL 表结构定义位于:
示例:
说明:
Account表示生成的 C++ 类名。account表示数据库中的表名。llong ID字段。index用于声明索引字段。生成后会生成对应 MySQL 数据类和注册代码。
当前 Demo 包含的基础消息
客户端到服务器:
服务器到客户端:
公共结构:
这些消息主要用于演示:
当前 Demo 包含的数据库表
仓库文档中包含基础 MySQL 表结构:
当前示例包含账号表:
字段包括:
用于基础账号登录测试。
设计理念
1. 强控制
服务器框架倾向于显式生命周期和显式调度。
系统初始化、更新、销毁都由框架统一管理,减少隐藏流程。
2. 工程化
框架不仅提供运行时模块,也提供协议生成、MySQL 生成、工程生成、CMakeLists 生成等工具。
目标是减少长期项目中的重复劳动。
3. 客户端 / 服务器一致性
服务器框架与 Unity 客户端框架配套设计。
协议、配置、消息结构尽量通过工具生成,减少两端手写导致的不一致。
4. 长期维护
框架中包含对象池、日志系统、单元测试、工程检查思路和大量基础工具,目标是支持长期运行和持续迭代。
与 MyFramework 客户端配套使用
推荐同时查看客户端仓库:
客户端框架包含:
服务器仓库和客户端仓库配合后,可以形成一套完整的开发流程:
配置表流程:
文档
仓库中包含部分环境和部署文档:
后续计划
后续会继续补充:
License
MIT