C#游戏服务器开发框架设计与架构详解
C#游戏服务器开发框架设计与架构详解
在游戏服务器开发领域,一个稳定且高性能的框架是项目成功的关键。本文将详细介绍C#游戏服务器开发框架的设计与架构,包括关键组件、设计思路和开发流程。通过本文,读者将能够了解如何构建一个适合游戏项目的服务器框架。
C#服务端所依赖的第三方基础库
在开始框架设计之前,先来看一下所依赖的一些基础服务框架方案。这些库可以通过NuGet包管理器很方便地安装和配置。
- DotNetty: 提供网络服务、HTTP服务和WebSocket服务支撑
- Protobuf-net: 实现对象的序列化和反序列化
- SqlSugarCore: 基于ORM的MySQL数据库交互通讯服务支撑
- Nlog: 游戏服务端的日志打印服务支撑
- Microsoft.Extensions.Configuration: 服务器与游戏配置服务支撑
- Litjson: JSON编码解码服务支撑
- StackExchange.Redis: Redis Server交互操作服务支撑
- EnyimMemcachedCore: Memcached内存缓存服务支撑
- LogicLooper: 游戏服务端状态同步帧同步的帧率控制服务支撑
这些库的使用使得游戏服务端框架的开发变得简单且稳定。
高性能高并发服务端框架设计架构流程详解
架构图
关键点1: 支持多种数据通讯
框架支持TCP Socket、WebSocket和HTTP三种方式与客户端进行数据通讯。接收到数据后,通过工作线程进行请求的逻辑处理。
关键点2: 多线程发挥CPU的多核优势
为了实现高性能与高并发,框架采用工作线程池模式,充分利用服务端机器的多核CPU优势。网络IO、日志打印、数据库存储和游戏业务逻辑等都通过工作线程池进行处理。
关键点3: 一切的业务流程都从Entry开始
服务端处理的每个请求都会通过统一的入口(Entry)进行。例如,账号系统相关的逻辑处理可以写入AuthEntry中,便于后期维护和功能扩展。
关键点4: 具体的处理流程逻辑交给Process
Entry不包含具体的业务逻辑,而是调用特定的Process代码。Processer负责处理每个具体业务逻辑的流程,其功能代码由底层框架的FrameWork、系统API函数和自定义功能函数等提供支撑。
关键点5: 扁平化的数据对象
将服务端的每个玩家数据、Boss数据和NPC数据进行扁平化设计,每个数据对象都是纯数据,不包含任何代码逻辑。例如,玩家的Entity数据由基本信息、战斗信息和任务信息等组件数据组成,这些数据对象供Processer处理和访问。
关键点6: Framework的基础服务支撑
Framework为整个基础服务提供支撑,包括数据库服务、日志服务和网络服务等。同时,针对游戏行业的需求,还提供了一些特定的游戏相关库支持,如RVO动态避障、寻路导航和物理引擎等。
关键点7: 业务逻辑开发方式
框架的使用方式如下:
- 给新业务添加一个Entry类,并注册对应的服务
- 定义数据通讯协议的格式结构
- 定义业务逻辑功能需要的数据组件,并添加到Entity
- 编写业务逻辑对应的Processer流程,完成对应功能
关键点8: 游戏核心战斗线程的特定调度与并行扩展
游戏核心战斗场景通常在一个线程中处理,而不是使用线程池中的任意线程。框架提供了机制,使得不同地图或副本可以扩展不同的线程来提供服务。
总结
通过采用扁平化的数据对象设计、业务逻辑流程化、多线程并发调度以及特定战斗线程的调度处理,该框架使得业务代码流程清晰,没有过多的继承体系与模板。这种设计不仅易于上手,还确保了网络请求处理的简单性和清晰性。