a. 内容描述

该项目是一个专为大型多人在线游戏设计的零反射、高性能C#游戏服务器框架。其核心功能定位于提供一套完整的、面向现代游戏开发的服务器端解决方案,特别强调性能、分布式架构以及对多种游戏类型的适配性。

核心功能定位:

  • 零反射与高性能: 框架的核心设计目标之一是消除运行时反射带来的性能开销,通过编译时代码生成等技术实现极致性能,并原生支持Native AOT(提前编译)。
  • 分布式服务器架构: 内置对分布式部署的支持,方便开发者构建跨服通信、服务器集群等复杂系统,适应大规模玩家在线的需求。
  • 多协议与多平台支持: 提供对TCP、KCP(低延迟UDP)、WebSocket和HTTP等多种网络协议的原生支持,使服务器能适配从AppStore或Android应用市场排名靠前的APP中的实时对战游戏到H5/小游戏等不同客户端。

关键应用场景:

  • 大型多人在线角色扮演游戏 (MMORPG): 利用其分布式架构、跨服通信和实体寻址系统。
  • 实时对战类游戏: 依赖其KCP低延迟协议和高性能的ECS(实体组件系统)架构。
  • 开放世界游戏: 利用其场景管理和实体层级系统。
  • 回合制/卡牌游戏: 借助其稳定的TCP/WebSocket通信和数据持久化能力。
  • H5/小游戏: 通过WebSocket协议与Unity WebGL平台无缝兼容。
  • 高并发游戏服务: 得益于其分布式部署能力和对象池等优化手段。

b. 功能特性

  1. 零反射与AOT支持: 所有消息处理器、系统等均在编译时通过源生成器注册,无需运行时反射扫描,极大提升了性能并完美支持Native AOT编译。
  2. Roaming路由系统: 实现自动的服务器间消息路由。客户端只需连接到网关服务器,框架即可根据消息类型自动将请求转发到正确的目标服务器(如地图服务器、聊天服务器),对开发者透明,简化了分布式开发。
  3. 多协议网络层: 一套代码可同时支持TCP、KCP、WebSocket和HTTP协议,开发者通过配置文件即可切换,适应不同网络环境和客户端类型。
  4. ECS(实体组件系统)架构: 采用组合优于继承的设计理念,通过实体、组件和系统来组织游戏逻辑,提高代码的模块化、复用性和运行效率。
  5. 内置跨服通信机制: 提供了便捷的跨服事件发布/订阅机制,轻松实现跨服公告、排行榜、PVP等功能。
  6. 数据库与持久化: 支持MongoDB等数据库,提供便捷的数据存取和实体持久化API,并支持分表存储。
  7. 脚手架工具 (CLI): 提供命令行工具,帮助开发者快速初始化项目、添加框架组件(如网络协议、日志等),提升开发效率。
  8. 完善的工具链: 包括协议导出工具、配置表导出工具等,辅助开发工作流。

d. 使用说明

  1. 环境准备: 需要安装 .NET 8.0+ SDK,推荐使用Visual Studio 2022或JetBrains Rider作为开发环境。数据库(如MongoDB)为可选。
  2. 项目创建: 通过安装官方提供的CLI工具 (Fantasy.Cli),使用 fantasy init 命令交互式地创建新的游戏服务器项目。
  3. 添加功能: 使用 fantasy add 命令为项目添加所需的框架组件,例如特定的网络协议或日志库。
  4. 协议定义与生成: 使用项目提供的协议编辑工具定义客户端与服务器、服务器内部之间的通信消息(.proto文件),工具会自动生成对应的C#代码。
  5. 逻辑开发:
    • 使用ECS模式定义Entity(实体)、Component(组件)和System(系统)。
    • 通过继承框架提供的基类(如MessageRoaming)编写消息处理器。
    • 利用Scene(场景)作为服务器逻辑的容器和组织单元。
  6. 运行与部署: 配置好服务器场景类型和网络端点后,即可启动服务器。框架支持在Windows、Linux服务器上进行容器化部署。

e. 潜在新需求

(1)需求1:用户希望框架能提供对MongoDB数据库更底层、更丰富的原生操作接口
具体表现为希望使用MongoDB的原生查询、聚合管道、自增操作等功能,而不仅限于框架封装的基础CRUD接口。

(2)需求2:用户希望在协议定义中支持映射为byte[]数组类型
当前proto文件中定义的repeated byte字段会自动映射为List<byte>,用户希望能有选项或方式将其映射为byte[]ArraySegment<byte>,以满足特定数据传输需求。

(3)需求3:用户希望Roaming(漫游)消息能支持指定除Terminus(终端)以外的其他类型实体作为处理器参数
当前Roaming消息处理器的泛型参数固定为某种终端类型,用户希望可以自定义,例如让Player实体直接作为漫游消息的接收者。

(4)需求4:用户希望框架提供更完善的机器人压测工具和动态服务器伸缩、服务发现机制
用户提到需要用于压力测试的机器人组件,以及在容器化(如K8s)环境下动态管理服务器进程和Scene的场景支持,包括服务发现和超过255个Scene ID的限制。

(5)需求5:用户希望优化或提供更多样的对象池(Pool)行为
有用户对当前对象池的Rent(总是新建)和Return(未放入池中)行为提出疑问,期望对象池能有更符合常规预期的缓存和复用逻辑。

(6)需求6:用户希望框架提供更完整的客户端范例和最佳实践
包括完整的小型游戏Demo、UI与热更新集成、打包流程等,为新用户提供更清晰的学习路径和项目模板。

(7)需求7:用户希望优化协议导出工具,使其不强制依赖特定执行目录
当前执行脚本必须在特定目录下运行,用户希望工具能更灵活,允许在任何子目录下执行。
article id:234489f7105e8dc0b51038e0c5e9b444

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐