GameFrameX.Utility
                             
                            
                                1.5.1-dev41
                            
                        
                    See the version list below for details.
dotnet add package GameFrameX.Utility --version 1.5.1-dev41
NuGet\Install-Package GameFrameX.Utility -Version 1.5.1-dev41
<PackageReference Include="GameFrameX.Utility" Version="1.5.1-dev41" />
<PackageVersion Include="GameFrameX.Utility" Version="1.5.1-dev41" />
<PackageReference Include="GameFrameX.Utility" />
paket add GameFrameX.Utility --version 1.5.1-dev41
#r "nuget: GameFrameX.Utility, 1.5.1-dev41"
#:package GameFrameX.Utility@1.5.1-dev41
#addin nuget:?package=GameFrameX.Utility&version=1.5.1-dev41&prerelease
#tool nuget:?package=GameFrameX.Utility&version=1.5.1-dev41&prerelease
<div align="center">
GameFrameX
高性能、跨平台的游戏服务器框架
English | 简体中文
</div>
📖 简介
GameFrameX 是一个基于 C# .NET 8.0 开发的高性能游戏服务器框架,采用 Actor 模型设计,支持跨平台部署。框架内置热更新机制,可以满足绝大部分游戏类型的需求,特别适合与 Unity3D 协同开发。
设计理念:大道至简,以简化繁
✨ 核心特性
🚀 高性能架构
- Actor 模型:基于 TPL DataFlow 构建的高性能 Actor 系统
- 全异步编程:采用 async/await 模式,代码清晰优雅
- 无锁设计:通过 Actor 模型避免传统锁机制的性能损耗
- 内存优化:自动回收不活跃数据,减少内存占用
🔄 热更新支持
- 不停服更新:支持运行时热更新游戏逻辑
- 状态逻辑分离:状态持久化,逻辑可热更
- 安全可靠:更新失败可回滚,保证服务稳定性
- 增量更新:只更新修改的部分,提高更新效率
🌐 网络通信
- 多协议支持:TCP、UDP、WebSocket、HTTP
- 高并发:基于 SuperSocket 的异步 I/O 模型
- 消息处理:内置消息分包、粘包处理机制
- 安全传输:支持 SSL/TLS 加密
💾 数据持久化
- 透明持久化:自动序列化/反序列化,开发者无需关心数据库操作
- NoSQL 支持:默认使用 MongoDB,支持其他 NoSQL 数据库
- 缓存机制:智能缓存策略,提高数据访问性能
⏰ 定时任务
- 多种定时器:一次性、周期性、计划任务
- 线程安全:内置线程安全的 Timer 和 Scheduler
- 事件系统:完整的事件驱动架构
🏗️ 架构设计
┌─────────────────────────────────────────────────────────────┐
│                        Client Layer                         │
├─────────────────────────────────────────────────────────────┤
│                      Network Layer                          │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐           │
│  │     TCP     │ │  WebSocket  │ │    HTTP     │           │
│  └─────────────┘ └─────────────┘ └─────────────┘           │
├─────────────────────────────────────────────────────────────┤
│                      Message Layer                          │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │              Message Handlers                           │ │
│  └─────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│                       Actor Layer                           │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐           │
│  │   Player    │ │   Server    │ │   Account   │           │
│  │   Actor     │ │   Actor     │ │   Actor     │           │
│  └─────────────┘ └─────────────┘ └─────────────┘           │
├─────────────────────────────────────────────────────────────┤
│                    Component Layer                          │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐           │
│  │  Component  │ │  Component  │ │  Component  │           │
│  │   + State   │ │   + State   │ │   + State   │           │
│  └─────────────┘ └─────────────┘ └─────────────┘           │
├─────────────────────────────────────────────────────────────┤
│                     Database Layer                          │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │                    MongoDB                              │ │
│  └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
🚀 快速开始
环境要求
- .NET 8.0 SDK
- MongoDB 4.x+
- Visual Studio 2022 或 JetBrains Rider
安装步骤
- 克隆项目 - git clone https://github.com/GameFrameX/GameFrameX.git cd GameFrameX/Server
- 安装依赖 - dotnet restore
- 配置数据库 - 启动 MongoDB 服务
- 修改配置文件中的数据库连接字符串
 
- 编译运行 - dotnet build dotnet run --project GameFrameX.Launcher
- 验证运行 - 打开 Unity 工程
- 运行 Launcher 场景
- 查看控制台日志确认连接成功
 
📁 项目结构
GameFrameX.Server/
├── GameFrameX.Apps/              # 应用层(状态数据)
│   ├── Account/                  # 账号模块
│   ├── Player/                   # 玩家模块
│   └── Server/                   # 服务器模块
├── GameFrameX.Hotfix/            # 热更新层(业务逻辑)
│   ├── Logic/                    # 业务逻辑
│   └── StartUp/                  # 启动逻辑
├── GameFrameX.Core/              # 核心框架
│   ├── Actors/                   # Actor 系统
│   ├── Components/               # 组件系统
│   └── Events/                   # 事件系统
├── GameFrameX.NetWork/           # 网络模块
├── GameFrameX.DataBase/          # 数据库模块
├── GameFrameX.Config/            # 配置模块
└── GameFrameX.Launcher/          # 启动器
🔧 核心概念
Entity-Component-State 架构
- Entity:游戏实体(玩家、公会、系统等)
- Component:功能组件(背包、任务、战斗等)
- State:状态数据(组件的持久化数据)
Actor 模型
每个 Entity 都有一个对应的 Actor,所有对 Entity 的操作都通过 Actor 进行,保证线程安全:
// 获取玩家组件代理
var playerAgent = await ActorManager.GetComponentAgent<PlayerComponentAgent>(playerId);
// 调用组件方法(自动入队,线程安全)
var result = await playerAgent.AddExp(1000);
热更新机制
- Apps 工程:包含状态数据,不可热更
- Hotfix 工程:包含业务逻辑,支持热更
- 代理模式:通过 Agent 代理实现逻辑与状态分离
📚 开发指南
创建新的游戏模块
- 定义状态类(Apps 工程) - public class BagState : StateBase { public List<Item> Items { get; set; } = new(); public int MaxSlots { get; set; } = 100; }
- 创建组件类(Apps 工程) - public class BagComponent : StateComponent<BagState> { // 组件初始化逻辑 }
- 实现业务逻辑(Hotfix 工程) - public class BagComponentAgent : StateComponentAgent<BagComponent, BagState> { public async Task<bool> AddItem(int itemId, int count) { // 业务逻辑实现 return true; } }
消息处理
[MessageMapping(typeof(ReqLogin))]
public class LoginHandler : BaseMessageHandler
{
    public override async Task<MessageObject> Action(MessageObject message)
    {
        var request = (ReqLogin)message;
        // 处理登录逻辑
        return new RespLogin { Success = true };
    }
}
🔍 性能优化
Actor 设计原则
- 独立性:尽可能减少 Actor 间的依赖
- 粒度控制:合理拆分 Actor,避免过度细分
- 避免死锁:遵循层级调用原则(低层级调用高层级)
内存管理
- 自动回收不活跃的玩家数据
- 使用对象池减少 GC 压力
- 合理设置缓存策略
🛠️ 部署指南
Docker 部署
# 构建镜像
docker build -t gameframex .
# 运行容器
docker run -d -p 8080:8080 gameframex
生产环境配置
- 数据库配置:配置 MongoDB 集群
- 负载均衡:使用 Nginx 或 HAProxy
- 监控告警:集成 Prometheus + Grafana
- 日志收集:使用 ELK 或类似方案
🤝 贡献指南
我们欢迎所有形式的贡献!
- Fork 本仓库
- 创建特性分支 (git checkout -b feature/AmazingFeature)
- 提交更改 (git commit -m 'Add some AmazingFeature')
- 推送到分支 (git push origin feature/AmazingFeature)
- 创建 Pull Request
📄 许可证
本项目采用 Apache License 2.0 许可证 - 查看 LICENSE 文件了解详情。
🔗 相关链接
🙏 致谢
感谢所有为 GameFrameX 做出贡献的开发者们!
<div align="center">
如果这个项目对你有帮助,请给我们一个 ⭐
</div>
| Product | Versions Compatible and additional computed target framework versions. | 
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. | 
- 
                                                    net8.0- GameFrameX.Foundation.Hash (>= 1.4.0)
- GameFrameX.Foundation.Logger (>= 1.4.0)
- Lib.Harmony (>= 2.3.6)
- Mapster (>= 7.4.0)
- SharpZipLib (>= 1.4.2)
- Tedd.RandomUtils (>= 1.0.6)
- Yitter.IdGenerator (>= 1.0.14)
 
NuGet packages (15)
Showing the top 5 NuGet packages that depend on GameFrameX.Utility:
| Package | Downloads | 
|---|---|
| GameFrameX.NetWork.Abstractions GameFrameX.NetWork.Abstractions,GameFrameX 框架的基础设施框架库.框架文档主页: https://gameframex.doc.alianblank.com | |
| GameFrameX.NetWork GameFrameX.NetWork,GameFrameX 框架的基础设施框架库.框架文档主页: https://gameframex.doc.alianblank.com | |
| GameFrameX.NetWork.HTTP GameFrameX.NetWork.HTTP,GameFrameX 框架的基础设施框架库.框架文档主页: https://gameframex.doc.alianblank.com | |
| GameFrameX.DataBase GameFrameX.DataBase,GameFrameX 框架的基础设施框架库,用于和数据库交互的接口.框架文档主页: https://gameframex.doc.alianblank.com | |
| GameFrameX.Core GameFrameX.Core,GameFrameX 框架的基础设施框架库,处理核心业务.框架文档主页: https://gameframex.doc.alianblank.com | 
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | 
|---|---|---|
| 2.0.0.2-dev1 | 0 | 10/31/2025 | 
| 2.0.0.1-dev9 | 182 | 10/25/2025 | 
| 2.0.0.1-dev8 | 242 | 10/20/2025 | 
| 2.0.0.1-dev7 | 494 | 10/14/2025 | 
| 2.0.0.1-dev6 | 248 | 10/13/2025 | 
| 2.0.0.1-dev4 | 205 | 10/10/2025 | 
| 2.0.0.1-dev3 | 219 | 10/10/2025 | 
| 2.0.0.1-dev2 | 231 | 10/10/2025 | 
| 2.0.0.1-dev1 | 268 | 9/29/2025 | 
| 2.0.0-dev4 | 262 | 9/29/2025 | 
| 2.0.0-dev3 | 264 | 9/29/2025 | 
| 2.0.0-dev2 | 262 | 9/29/2025 | 
| 2.0.0-dev1 | 262 | 9/28/2025 | 
| 1.5.1-dev9 | 388 | 3/31/2025 | 
| 1.5.1-dev7 | 260 | 3/29/2025 | 
| 1.5.1-dev6 | 271 | 3/29/2025 | 
| 1.5.1-dev5 | 354 | 3/28/2025 | 
| 1.5.1-dev47 | 324 | 9/20/2025 | 
| 1.5.1-dev46 | 401 | 9/18/2025 | 
| 1.5.1-dev45 | 382 | 9/17/2025 | 
| 1.5.1-dev44 | 1,084 | 8/15/2025 | 
| 1.5.1-dev43 | 977 | 7/18/2025 | 
| 1.5.1-dev42 | 373 | 7/4/2025 | 
| 1.5.1-dev41 | 268 | 7/4/2025 | 
| 1.5.1-dev40 | 270 | 6/28/2025 | 
| 1.5.1-dev4 | 733 | 3/25/2025 | 
| 1.5.1-dev39 | 189 | 6/28/2025 | 
| 1.5.1-dev38 | 249 | 6/17/2025 | 
| 1.5.1-dev37 | 273 | 6/17/2025 | 
| 1.5.1-dev36 | 260 | 6/17/2025 | 
| 1.5.1-dev35 | 477 | 5/26/2025 | 
| 1.5.1-dev34 | 508 | 5/23/2025 | 
| 1.5.1-dev33 | 253 | 5/23/2025 | 
| 1.5.1-dev32 | 244 | 5/23/2025 | 
| 1.5.1-dev31 | 251 | 5/23/2025 | 
| 1.5.1-dev30 | 280 | 5/22/2025 | 
| 1.5.1-dev3 | 645 | 3/24/2025 | 
| 1.5.1-dev29 | 282 | 5/21/2025 | 
| 1.5.1-dev28 | 431 | 5/14/2025 | 
| 1.5.1-dev27 | 358 | 5/13/2025 | 
| 1.5.1-dev26 | 378 | 5/13/2025 | 
| 1.5.1-dev25 | 393 | 5/13/2025 | 
| 1.5.1-dev24 | 347 | 5/13/2025 | 
| 1.5.1-dev23 | 346 | 5/12/2025 | 
| 1.5.1-dev22 | 197 | 5/10/2025 | 
| 1.5.1-dev21 | 195 | 5/10/2025 | 
| 1.5.1-dev20 | 190 | 5/10/2025 | 
| 1.5.1-dev2 | 366 | 3/20/2025 | 
| 1.5.1-dev19 | 229 | 5/9/2025 | 
| 1.5.1-dev17 | 219 | 5/9/2025 | 
| 1.5.1-dev16 | 279 | 5/8/2025 | 
| 1.5.1-dev15 | 265 | 5/8/2025 | 
| 1.5.1-dev14 | 283 | 5/8/2025 | 
| 1.5.1-dev13 | 278 | 4/25/2025 | 
| 1.5.1-dev10 | 310 | 3/31/2025 | 
| 1.5.1-dev1 | 276 | 3/14/2025 | 
| 1.5.0-dev1 | 400 | 3/13/2025 | 
| 1.4.2 | 361 | 2/9/2025 | 
| 1.4.2-dev9 | 266 | 2/19/2025 | 
| 1.4.2-dev8 | 277 | 2/18/2025 | 
| 1.4.2-dev7 | 286 | 2/12/2025 | 
| 1.4.2-dev6 | 252 | 2/11/2025 | 
| 1.4.2-dev5 | 251 | 2/11/2025 | 
| 1.4.2-dev4 | 245 | 2/11/2025 | 
| 1.4.2-dev3 | 256 | 2/11/2025 | 
| 1.4.2-dev2 | 317 | 2/10/2025 | 
| 1.4.2-dev15 | 725 | 3/4/2025 | 
| 1.4.2-dev14 | 356 | 3/4/2025 | 
| 1.4.2-dev13 | 266 | 2/21/2025 | 
| 1.4.2-dev12 | 233 | 2/21/2025 | 
| 1.4.2-dev11 | 237 | 2/21/2025 | 
| 1.4.2-dev10 | 230 | 2/21/2025 | 
| 1.4.2-dev1 | 252 | 2/9/2025 | 
| 1.4.1 | 237 | 2/9/2025 | 
| 1.4.0 | 278 | 2/6/2025 | 
| 1.3.3 | 246 | 2/6/2025 | 
| 1.3.2 | 253 | 2/6/2025 | 
| 1.3.1 | 238 | 2/6/2025 | 
| 1.3.0-beta2 | 250 | 2/5/2025 | 
| 1.3.0-beta1 | 241 | 2/5/2025 | 
| 1.2.0-beta9 | 336 | 12/3/2024 | 
| 1.2.0-beta8 | 304 | 12/3/2024 | 
| 1.2.0-beta7 | 295 | 11/24/2024 | 
| 1.2.0-beta6 | 285 | 11/24/2024 | 
| 1.2.0-beta5 | 284 | 11/24/2024 | 
| 1.2.0-beta4 | 283 | 11/24/2024 | 
| 1.2.0-beta3 | 492 | 11/23/2024 | 
| 1.2.0-beta22 | 250 | 1/24/2025 | 
| 1.2.0-beta21 | 246 | 1/24/2025 | 
| 1.2.0-beta20 | 221 | 1/22/2025 | 
| 1.2.0-beta19 | 253 | 1/17/2025 | 
| 1.2.0-beta18 | 243 | 1/15/2025 | 
| 1.2.0-beta17 | 234 | 1/15/2025 | 
| 1.2.0-beta16 | 389 | 12/28/2024 | 
| 1.2.0-beta15 | 333 | 12/27/2024 | 
| 1.2.0-beta14 | 316 | 12/26/2024 | 
| 1.2.0-beta13 | 348 | 12/19/2024 | 
| 1.2.0-beta12 | 318 | 12/16/2024 | 
| 1.2.0-beta11 | 314 | 12/12/2024 | 
| 1.2.0-beta10 | 296 | 12/11/2024 | 
| 1.2.0-beta1 | 378 | 8/28/2024 | 
| 1.1.1-beta9 | 341 | 8/21/2024 | 
| 1.1.1-beta7 | 317 | 8/21/2024 | 
| 1.1.1-beta6 | 310 | 8/20/2024 | 
| 1.1.1-beta5 | 329 | 8/20/2024 | 
| 1.1.1-beta4 | 258 | 8/4/2024 | 
| 1.1.1-beta3 | 287 | 8/3/2024 | 
| 1.1.1-beta2 | 281 | 8/3/2024 | 
| 1.1.1-beta1 | 248 | 7/29/2024 | 
| 1.1.0 | 374 | 7/20/2024 | 
| 1.1.0-beta5 | 249 | 7/29/2024 | 
| 1.1.0-beta4 | 251 | 7/29/2024 | 
| 1.1.0-beta3 | 253 | 7/29/2024 | 
| 1.1.0-beta2 | 262 | 7/29/2024 | 
| 1.1.0-beta1 | 306 | 7/28/2024 | 
| 1.0.7-beta13 | 305 | 7/19/2024 | 
| 1.0.7-beta12 | 264 | 7/19/2024 | 
| 1.0.7-beta11 | 278 | 7/18/2024 | 
| 1.0.7-beta10 | 278 | 7/16/2024 | 
| 1.0.6-beta7 | 248 | 7/16/2024 | 
| 1.0.6-beta5 | 235 | 7/12/2024 | 
| 1.0.6-beta4 | 259 | 7/11/2024 | 
| 1.0.6-beta3 | 242 | 7/9/2024 | 
| 1.0.6-beta2 | 262 | 7/9/2024 | 
| 1.0.6-beta1 | 276 | 7/9/2024 | 
| 1.0.6-bata6 | 237 | 7/15/2024 | 
| 1.0.5 | 273 | 7/5/2024 | 
| 1.0.5-beta2 | 252 | 7/6/2024 | 
| 1.0.5-beta1 | 240 | 7/6/2024 | 
| 1.0.5-beta | 259 | 7/6/2024 | 
| 1.0.4 | 261 | 7/4/2024 | 
| 1.0.3 | 243 | 7/4/2024 | 
| 1.0.0 | 263 | 7/3/2024 | 
| 0.0.7-beta | 248 | 7/4/2024 | 
| 0.0.6-beta | 184 | 7/4/2024 |