问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C#游戏服务器开发框架设计与架构详解

创作时间:
作者:
@小白创作中心

C#游戏服务器开发框架设计与架构详解

引用
1
来源
1.
http://www.bilibili.com/read/cv38290620/

在游戏服务器开发领域,一个稳定且高性能的框架是项目成功的关键。本文将详细介绍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: 业务逻辑开发方式

框架的使用方式如下:

  1. 给新业务添加一个Entry类,并注册对应的服务
  2. 定义数据通讯协议的格式结构
  3. 定义业务逻辑功能需要的数据组件,并添加到Entity
  4. 编写业务逻辑对应的Processer流程,完成对应功能

关键点8: 游戏核心战斗线程的特定调度与并行扩展

游戏核心战斗场景通常在一个线程中处理,而不是使用线程池中的任意线程。框架提供了机制,使得不同地图或副本可以扩展不同的线程来提供服务。

总结

通过采用扁平化的数据对象设计、业务逻辑流程化、多线程并发调度以及特定战斗线程的调度处理,该框架使得业务代码流程清晰,没有过多的继承体系与模板。这种设计不仅易于上手,还确保了网络请求处理的简单性和清晰性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号