GameFrameX.Core 1.5.1-dev44

This is a prerelease version of GameFrameX.Core.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package GameFrameX.Core --version 1.5.1-dev44
                    
NuGet\Install-Package GameFrameX.Core -Version 1.5.1-dev44
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GameFrameX.Core" Version="1.5.1-dev44" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="GameFrameX.Core" Version="1.5.1-dev44" />
                    
Directory.Packages.props
<PackageReference Include="GameFrameX.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add GameFrameX.Core --version 1.5.1-dev44
                    
#r "nuget: GameFrameX.Core, 1.5.1-dev44"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package GameFrameX.Core@1.5.1-dev44
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=GameFrameX.Core&version=1.5.1-dev44&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=GameFrameX.Core&version=1.5.1-dev44&prerelease
                    
Install as a Cake Tool

<div align="center">

GameFrameX

高性能、跨平台的游戏服务器框架

License .NET Platform Build Status

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                              │ │
│  └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

🚀 快速开始

环境要求

安装步骤

  1. 克隆项目

    git clone https://github.com/GameFrameX/GameFrameX.git
    cd GameFrameX/Server
    
  2. 安装依赖

    dotnet restore
    
  3. 配置数据库

    • 启动 MongoDB 服务
    • 修改配置文件中的数据库连接字符串
  4. 编译运行

    dotnet build
    dotnet run --project GameFrameX.Launcher
    
  5. 验证运行

    • 打开 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 代理实现逻辑与状态分离

📚 开发指南

创建新的游戏模块

  1. 定义状态类(Apps 工程)

    public class BagState : StateBase
    {
        public List<Item> Items { get; set; } = new();
        public int MaxSlots { get; set; } = 100;
    }
    
  2. 创建组件类(Apps 工程)

    public class BagComponent : StateComponent<BagState>
    {
        // 组件初始化逻辑
    }
    
  3. 实现业务逻辑(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 设计原则

  1. 独立性:尽可能减少 Actor 间的依赖
  2. 粒度控制:合理拆分 Actor,避免过度细分
  3. 避免死锁:遵循层级调用原则(低层级调用高层级)

内存管理

  • 自动回收不活跃的玩家数据
  • 使用对象池减少 GC 压力
  • 合理设置缓存策略

🛠️ 部署指南

Docker 部署

# 构建镜像
docker build -t gameframex .

# 运行容器
docker run -d -p 8080:8080 gameframex

生产环境配置

  1. 数据库配置:配置 MongoDB 集群
  2. 负载均衡:使用 Nginx 或 HAProxy
  3. 监控告警:集成 Prometheus + Grafana
  4. 日志收集:使用 ELK 或类似方案

🤝 贡献指南

我们欢迎所有形式的贡献!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

📄 许可证

本项目采用 Apache License 2.0 许可证 - 查看 LICENSE 文件了解详情。

🔗 相关链接

🙏 致谢

感谢所有为 GameFrameX 做出贡献的开发者们!


<div align="center">

如果这个项目对你有帮助,请给我们一个 ⭐

</div>

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.0.2-dev4 388 11/5/2025
2.0.0.2-dev3 192 11/4/2025
2.0.0.2-dev2 188 11/4/2025
2.0.0.2-dev1 222 10/31/2025
2.0.0.2-dev09 1,268 11/24/2025
2.0.0.2-dev08 201 11/24/2025
2.0.0.2-dev07 417 11/20/2025
2.0.0.2-dev06 388 11/19/2025
2.0.0.2-dev05 155 11/7/2025
2.0.0.1-dev9 107 10/25/2025
2.0.0.1-dev8 179 10/20/2025
2.0.0.1-dev7 455 10/14/2025
2.0.0.1-dev6 185 10/13/2025
2.0.0.1-dev4 147 10/10/2025
2.0.0.1-dev3 157 10/10/2025
2.0.0.1-dev2 170 10/10/2025
2.0.0.1-dev1 187 9/29/2025
2.0.0-dev4 174 9/29/2025
2.0.0-dev3 179 9/29/2025
2.0.0-dev2 170 9/29/2025
2.0.0-dev1 140 9/28/2025
1.5.1-dev9 260 3/31/2025
1.5.1-dev7 155 3/29/2025
1.5.1-dev6 159 3/29/2025
1.5.1-dev5 178 3/28/2025
1.5.1-dev47 239 9/20/2025
1.5.1-dev46 313 9/18/2025
1.5.1-dev45 289 9/17/2025
1.5.1-dev44 1,000 8/15/2025
1.5.1-dev43 901 7/18/2025
1.5.1-dev42 289 7/4/2025
1.5.1-dev41 174 7/4/2025
1.5.1-dev40 193 6/28/2025
1.5.1-dev4 518 3/25/2025
1.5.1-dev39 111 6/28/2025
1.5.1-dev38 194 6/17/2025
1.5.1-dev37 176 6/17/2025
1.5.1-dev36 181 6/17/2025
1.5.1-dev35 391 5/26/2025
1.5.1-dev34 432 5/23/2025
1.5.1-dev33 151 5/23/2025
1.5.1-dev32 158 5/23/2025
1.5.1-dev31 164 5/23/2025
1.5.1-dev30 199 5/22/2025
1.5.1-dev3 464 3/24/2025
1.5.1-dev29 179 5/21/2025
1.5.1-dev28 321 5/14/2025
1.5.1-dev27 255 5/13/2025
1.5.1-dev26 271 5/13/2025
1.5.1-dev25 310 5/13/2025
1.5.1-dev24 267 5/13/2025
1.5.1-dev23 249 5/12/2025
1.5.1-dev22 114 5/10/2025
1.5.1-dev21 122 5/10/2025
1.5.1-dev20 114 5/10/2025
1.5.1-dev2 207 3/20/2025
1.5.1-dev19 141 5/9/2025
1.5.1-dev17 145 5/9/2025
1.5.1-dev16 188 5/8/2025
1.5.1-dev15 186 5/8/2025
1.5.1-dev14 187 5/8/2025
1.5.1-dev13 168 4/25/2025
1.5.1-dev10 198 3/31/2025
1.5.1-dev1 187 3/14/2025
1.5.0-dev1 314 3/13/2025
1.4.2 171 2/9/2025
1.4.2-dev9 133 2/19/2025
1.4.2-dev8 167 2/18/2025
1.4.2-dev7 163 2/12/2025
1.4.2-dev6 151 2/11/2025
1.4.2-dev5 147 2/11/2025
1.4.2-dev4 130 2/11/2025
1.4.2-dev3 137 2/11/2025
1.4.2-dev2 140 2/10/2025
1.4.2-dev15 634 3/4/2025
1.4.2-dev14 261 3/4/2025
1.4.2-dev13 150 2/21/2025
1.4.2-dev12 156 2/21/2025
1.4.2-dev11 136 2/21/2025
1.4.2-dev10 141 2/21/2025
1.4.2-dev1 132 2/9/2025
1.4.1 147 2/9/2025
1.4.0 179 2/6/2025
1.3.3 165 2/6/2025
1.3.2 157 2/6/2025
1.3.1 161 2/6/2025
1.3.0-beta2 149 2/5/2025
1.3.0-beta1 148 2/5/2025
1.2.0-beta9 169 12/3/2024
1.2.0-beta8 127 12/3/2024
1.2.0-beta7 153 11/24/2024
1.2.0-beta6 143 11/24/2024
1.2.0-beta5 143 11/24/2024
1.2.0-beta4 134 11/24/2024
1.2.0-beta3 162 11/23/2024
1.2.0-beta22 148 1/24/2025
1.2.0-beta21 151 1/24/2025
1.2.0-beta20 135 1/22/2025
1.2.0-beta19 131 1/17/2025
1.2.0-beta18 133 1/15/2025
1.2.0-beta17 85 1/15/2025
1.2.0-beta16 199 12/28/2024
1.2.0-beta15 147 12/27/2024
1.2.0-beta14 131 12/26/2024
1.2.0-beta13 169 12/19/2024
1.2.0-beta12 158 12/16/2024
1.2.0-beta11 152 12/12/2024
1.2.0-beta10 148 12/11/2024
1.2.0-beta1 250 8/28/2024
1.1.1-beta9 187 8/21/2024
1.1.1-beta7 165 8/21/2024
1.1.1-beta6 181 8/20/2024
1.1.1-beta5 149 8/20/2024
1.1.1-beta4 134 8/4/2024
1.1.1-beta3 157 8/3/2024
1.1.1-beta2 146 8/3/2024
1.1.1-beta1 128 7/29/2024
1.1.0 202 7/20/2024
1.1.0-beta5 124 7/29/2024
1.1.0-beta4 135 7/29/2024
1.1.0-beta3 124 7/29/2024
1.1.0-beta2 126 7/29/2024
1.1.0-beta1 130 7/28/2024
1.0.7-beta13 168 7/19/2024
1.0.7-beta12 150 7/19/2024
1.0.7-beta11 165 7/18/2024
1.0.7-beta10 155 7/16/2024
1.0.6-beta7 141 7/16/2024
1.0.0 174 7/15/2024