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

我一直在思考一个问题,什么样的服务端框架最好用,最适合? 经过这些年的项目经验,其实最好用,最适合的游戏服务端框架就是自己结合公司项目需求,团队特点与技术能力,自己整合的游戏框架是最好用的。

很多新手会担心自己整合的框架不能商用,这个担心完全没有必要,现在行业的发展已经很成熟,每个模块都有成熟的解决方案来提供支撑,我们要做的就是整合起来,组织我们项目逻辑的开发方式而已,所以现在的行业设计一个游戏服务端框架远比大家想象的简单和稳定。今天给大家分享一下我们最新课程《C#服务端+双端(Unity/Cocos) SLG项目实战》中服务端框架的设计模式与组织项目的思想。希望能给大家带来一些启发。

对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀!

C# 服务端所依赖的第三方基础库

先给大家列举一下我们选择的一些基础服务的框架方案,使用NuGet包管理器很方便的就安装配置好了。

DotNetty: 网络服务,http服务,WebSocket服务支撑;

Protobuf-net: 对象的序列化/反序列化;

SqlSugarCore: 基于ORM的与mysql数据库交互通讯的服务支撑;

Nlog: 对游戏服务端的日志打印提供服务支撑;

Microsoft.Extensions.Configuration: 对服务器与游戏配置的服务支撑;

Litjson: 对Json编码解码的服务支撑;

StackExchange.Redis: 对与Redis Server交互的操作服务支撑;

EnyimMemcachedCore: 对memchach的内存缓存服务支撑;

LogicLooper:对游戏服务端状态同步帧同步的帧率控制的服务支撑;

这些库我们使用NuGet包管理器安装好就可以直接开发了(如图1-1)。

图1-1: 游戏服务端项目依赖的第三方库

我们服务端开发中的所有基础模块都有成熟的第三方库,有了这些第三方库的加持,你做的游戏服务端框架,想不稳定都难^_^。

高性能高并发服务端框架设计架构流程详解

先上架构图1-2,对照架构图从左到右来看下整个框架的结构。

图1-2

关键点1: 支持多种数据通讯

支持TCP Socket, WebSocket Http三种方式与客户端进行数据通讯,拿到数据后走后续通用的工作线程来进行请求的逻辑处理。

关键点2: 多线程发挥CPU的多核优势

为了实现高性能与高并发,充分发挥服务端机器CPU的多核优势,我们采用的是工作线程池的模式来驱动迭代上层的各种服务与处理。比如,网络IO,日志打印,数据库存储,游戏业务逻辑等。

关键点3: 一切的业务流程都从Entry开始;

服务端处理的每个请求都会走统一的入口Entry,这样让我们业务逻辑的维护就可以从Entry开始了。比如账号系统相关的逻辑处理,可以写入AuthEntry中,这样后期维护的时候,遇到登录的流程维护,直接从AuthEntry开始。

图1-3

关键点3: 具体的处理流程逻辑交给Process

如上图1-3,Entry不写具体的业务逻辑,直接调用特定的Process代码, 由Processer来处理每个对应的具体业务逻辑的流程。Processer来维护流程代码,功能代码由底层框架的FrameWork,系统API函数,自己编写的功能函数等来作为服务支撑。

关键点4: 扁平化的数据对象

把服务端的每个玩家数据,Boss数据,NPC数据我们都做好扁平化设计,每个数据对象都是纯数据,没有任何的代码逻辑。这样服务端处理每个个体数据时都非常地简单与清晰,避免复杂地继承关系。如每个玩家的Entity数据,由基本信息,战斗信息,任务信息等相关组件数据组成。这些数据对象提供给Processer处理与访问。

关键点5: Framework的基础服务的支撑

Framework对整个基础的一些服务提供支撑,比如数据库服务,日志服务,网络服务等。同时针对游戏行业的需求,会有一些游戏相关的特定库的支持,比如 RVO动态避障,寻路导航,物理引擎等。C#在这块也有很多成熟的游戏相关的库。

关键点6: 业务逻辑通常开发方式

这个对于框架来说是最重要的,因为等框架做好后,就是用它来开发扩展业务逻辑。框架好不好用,团队协作是否顺畅,任务分配是否清晰就取决于它了。我们采用流程+数据的模式来开发新业务:

Step1:给新业务添加一个Entry类,并注册好对应的服务;

Step2:定义好数据通讯协议的格式结构;

Step3:定义业务逻辑功能需要的数据组件,并添加到Entity;

Step4: 编写业务逻辑对应的Processer流程,完成对应功能;

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

与普通的业务逻辑流程处理不一样,游戏核心战斗场景,多个玩家同时战斗的处理一般在一个线程里,而不是用线程池中的任意线程调度执行。所以我们提供机制,同时游戏的玩家的同一战斗任务在一个线程中调度。不同的地图or副本等可以扩展不同的线程来提供服务。

End

纯数据结构对象扁平化,业务逻辑流程化,多线程并发调度与特定战斗线程的调度处理。业务代码流程清晰,没有过多的继承体系与模板,将简单胜于花哨。这样使得很多初始开发人员也能上手开发游戏服务端的业务。每个网络请求的处理流程非常的简单与清晰。

unity视频教程icon-default.png?t=O83Ahttps://www.bycwedu.com/promotion_channels/1189981998

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/420438.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SprinBoot+Vue小区车辆管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

CMU 10423 Generative AI:lec4(Modern Transformers + CNNs)

文章目录 1 概述2 内容摘录2.1 深度学习架构的历史2.2 预训练概念、三种训练方式、效果对比2.3 现代Transformer模型概览1. **PaLM (Pathways Language Model, 2022年10月)**2. **Llama-1 (2023年2月)**3. **Falcon (2023年6月-11月)**4. **Llama-2 (2023年8月)**5. **Mistral …

vba发邮件:如何设置自动化发送电子邮件?

vba发邮件的技巧有哪些?VBA如何调用outlook发邮件? VBA发邮件功能是一个非常实用的工具,能够帮助用户自动发送电子邮件,减少手动操作的时间和错误。AokSend将详细介绍如何通过VBA发邮件来实现自动化发送电子邮件的设置。 VBA发邮…

Java 设计模式-代理模式

目录 概述 一. 什么是代理模式 1. 举例说明 二. 代理模式作用 1. 保护代理 2. 增强功能 3. 代理交互 4. 远程代理: 三. 代理模式3个角色 四. 静态代理 1. 代码示例: 五. JDK动态代理 1. 代码示例: 六. CGLIB 动态代理 1.代码示…

怎样将vue项目 部署在ngixn的子目录下

如果同一服务器的80端口下,需要部署两个或以上数量的vue项目,那么就需要将其中一个vue项目部署在根目录下,其他的项目部署在子目录下. 像这样的配置 访问根目录 / 访问灭火器后台管理,访问 /mall/ 访问商城的后台管理 那么商场的vue项目,这样配置,才能在/mall/下正常访问? 1…

使用Nest.js+LangChain给低代码平台赋上AI代码生成能力,让低代码变成低低代码!

前言 LangChain 是一个用于开发由大型语言模型(LLM)支持的应用程序的框架。可以快速使用它集成各个模型,以及格式化用户输入和模型输出,封装了很多工具类,使得开发者很容易将其集成到自己的程序当中。 最近&#xff…

反相放大器电路设计

1 简介 反相放大器电路输入阻抗由外部电阻决定,因此要求输入源阻抗降低。该电路的共模电压等于同相端电压,通常同相端接地,所以该电路共模电压为零。 2 设计目标 2.1 输入 2.2 输出 2.3 频率 2.4 电源 3 电路设计 根据设计目标&#xff0c…

Solon2 与 Spring Boot 的核心区别及对比

在Java开发领域,Solon2和Spring Boot是两个备受关注的框架,它们各有特点,适用于不同的开发场景。本文将深入探讨Solon2与Spring Boot之间的核心区别,帮助开发者更好地理解并选择适合自己的框架。 1. 架构与基础 Solon2&#xff…

QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGis接口说明文档)

OSGeo4W简介 更高级的 QGIS 用户应该使用 OSGeo4W 包。此安装程序可以并行安装多个版本的 QGIS,并且还可以进行更高效的更新,因为每个新版本仅下载和安装更改的组件。      OSGeo4W 存储库包含许多来自 OSGeo 项目的软件。包括 QGIS 和所有依赖项&a…

echarts 水平柱图 科技风

var category [{ name: "管控", value: 2500 }, { name: "集中式", value: 8000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 } ]; // 类别 var total 10000; // 数据…

【银河麒麟高级服务器操作系统】虚拟机服务器执行systemctl提示timeout——分析全过程及处理建议

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 现象描述 产品信息 产品名称 银河麒麟高级服务…

SpringBoot3:轻松使用Jasypt实现配置文件信息加密

文章目录 前言一、概述1.1 Jasypt库简介1.2 Jasypt库的主要特点 二、开发环境三、Jasypt集成到SpringBoot33.1 引入依赖3.2 配置Jasypt3.3 加密配置文件信息3.3.1 方案一(不推荐)a.编写测试类生成加密后的配置文件信息b.运行c.修改原本的配置文件信息 3.…

【学术会议征稿】第八届电气、机械与计算机工程国际学术会议(ICEMCE 2024)

第八届电气、机械与计算机工程国际学术会议(ICEMCE 2024) 2024 8th International Conference on Electrical, Mechanical and Computer Engineering 第八届电气、机械与计算机工程国际学术会议(ICEMCE 2024)将于2024年10月25日…

深度学习-目标检测(二)Fast R-CNN

一:Fast R-CNN Fast R-CNN 是一篇由Ross Girshick 在 2015 年发表的论文,题为 “Fast R-CNN”。这篇论文旨在解决目标检测领域中的一些问题,特别是传统目标检测方法中存在的速度和准确性之间的矛盾。 论文摘要:本文提出了一种基于…

【Python系列】字典判断空

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【漏洞利用】2018年-2024年HVV 6000+个漏洞 POC 合集分享

此份poc 集成了Zabbix、用友、通达、Wordpress、Thinkcmf、Weblogic、Tomcat等 下载链接: 链接: https://pan.quark.cn/s/1cd7d8607b8a

华为 HCIP-Datacom H12-821 题库 (10)

有需要题库的可以看主页置顶 V群进行学习交流 1.缺省情况下,BGP 对等体邻接关系的保持时间是多少秒? A、120 秒 B、60 秒 C、10 秒 D、180 秒 答案:D 解析: BGP 存活消息每隔 60 秒发一次,保持时间“180 秒” 2.缺省…

54 mysql 中各种 timeout - connect/wait/interactive/read/write_timeout

前言 在 mysql 的服务器配置中, 我们经常会使用到几个 timeout 诸如 connect_timeout, wait_timeout, interactive_timeout, read_timeout, write_timeout 等等 我们 这里来看一下 他们的具体的使用场景, 以及具体控制的相关信息 是什么 connect_timeout 这个是 客户端 和…

《DB-GPT项目》专栏总目录

❤️ 专栏名称:《DB-GPT项目》 🌹 内容介绍:项目部署、大模型替换、底层源码修改、数据分析、数据可视化、自动化等,适合零基础和进阶的同学。 🚀 订阅专栏:订阅后可阅读专栏内所有内容,专栏持续…

SQL 编程基础

SQL(结构化查询语言)广泛应用于数据库操作,是每个程序员都需要掌握的技能之一。这篇文章将带你从基础入门,了解SQL编程中的常量、变量及流程控制语句。我们将采用简单易懂的语言,结合实际示例,帮助你轻松理…