分布式服务器框架之搭建C#+MongoDB+Redis初步

后面为了学习准备搭建一个分部署的游戏服务器,还有一套基于Unity的客户端轻量级框架。架构图后面补上,用CSDN记录一下自己的开发笔记。

游戏服务器主要分成了四个库(Dll)、三个逻辑服务器、一个Web站点。

一、四个库(Dll)

1.Servers.Common

        Common类库主要做的是一些大家都需要用到的通用的事情,为了避免重复,所以就提取出来了一个Dll。Common库主要是实现了表格数据的加载模块、在CsRedisClient、MongoClient中间件的基础上进行二次封装。实现了数据库连接、Redis连接、以及数据库和Redis的增删改查断开操作。

2.Servers.Core

        Core类库做的事儿都是一些通用的每个服务器都会用到的通用工具和算法。实现的有:加密算法工具、字符串工具、压缩工具、内存操作工具、日志系统、Bit库、通用的枚举定义、委托定义。

3.Servers.Model

        每个服务器For每个服务器的Client,Manager类。每个服务器For每个服务器的ConnectAgent类都会在Model模型中实现,这里面会存放每个服务器都需要的数据。每个服务器都会依赖Model库,相当于GameServer也依赖,GateServer也会依赖,WorldServer还会依赖,当这些服务器引用Model.dll的时候,会多出来很多用不到的东西,比如GameServer里面应该只需要用到GameServerManager就行了,但是会出现GateserverManager、WorldServerManager。 这也是后面要优化的结构之一(全部写完再开始优化)

4.Servers.HotFix

        HotFix库是服务器的热更新库,HotFix的被依赖关系和Model库一样,需要被所有的可执行的服务器依赖,基本原理就是每次逻辑变更的时候通过在控制台敲击命令,Dll就会被重新加载,由于是依赖的接口实现的逻辑,变更了的时候给接口的指向重新赋值即可,就可以通过虚表Link到刚新完的那个Dll的函数里。可以再神不知鬼不觉的情况下实现服务器逻辑热更,修复bug,不过这个方案也有它的问题 第一就是逻辑重叠高,我A服务器就需要A服务器的逻辑就行,但是这个Dll里面有ABCD的所有逻辑。这种方法代码少可以这么干,写起来方便,快捷!。但是代码多了可能就得拆分成HotFixGS,HotFixGWS,HotFixWS几个Dll。后续可能还会研究下服务器Lua的热更新。

二、三个服务器

1.Servers.GameServer

        这个服务器只负责初始化配置、初始化与Redis连接、MogoDB连接、数据表初始化、GameServerManager初始化、日志管理器初始化。其实本身这个工程没啥逻辑,逻辑都被打散到了Model库克HotFix库里去了。

2.Servers.GateServer

        干的事儿和GS的工作差不多:负责初始化配置、初始化与Redis连接、MogoDB连接、数据表初始化、日志管理器初始化。其实本身这个工程没啥逻辑,逻辑都被打散到了Model库克HotFix库里去了。唯一不同的是初始化的是GateServerManager。

3.Servers.WorldServer

        一样,干的事儿和GS的工作差不多: 负责初始化配置、初始化与Redis连接、MogoDB连接、数据表初始化、日志管理器初始化。其实本身这个工程没啥逻辑,逻辑都被打散到了Model库克HotFix库里去了。唯一不同的是初始化的是WorldServerManager。

三、Web站点

1.WebAccount(账号服务器)

        WebAccount站点主要干的事儿是下发 服务器状态信息,这个服务器会和WorldServer建立连接,等所有的GameServer初始化完成之后会同步给WorldServer,WorldServer同步给账号服务器站点,然后账号站点等待玩家请求。

2.CDN站点

        CDN是资源(文件)站点,存放的主要是客户端热更资源,游戏客户端启动的时候会找到最近的CDN站点,下载CDN内的里的filelist文件,拿到文件中的所有md5和本地作比对热更新。cdn应该根据各个地区,分别架设,其目的主要是为了不同地区的玩家可以享受到相同的访问速度。

        这是这个专栏的第一篇文章,后续的心血历程会记录在游戏服务器框架(C#+MogoDB+Redis分布式服务器)这篇专栏里面,分享下自己写的东西,如果对大家有启发就更好了,也记录下自己的成长之路。 后续项目都传到国内的代码平台上去(github龟速,太慢了,目前考虑gitee,有更好的托管平台小伙伴儿可以留言呀,不要藏着掖着~)

        就这样,写完了~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用方法: 先附加DB_51aspx文件夹里面数据库到你的mssql 2000当中,用VS2005打开,修改web.config中的数据库配置: 这里改你的数据库用户名及密码 ,运行!OK! 后台路径为:admin/login.aspx 用户名 、密码为51aspx 采用多层分布式架构 -------WEB-------- 表示层,负责应用程序的表现形式、用户体验等。 -------Common------- 公共函数类,字符截取、验证用户输入信息等功能。一般被表示层调用。 -------BLL------ 处理应用程序的业务逻辑,被表示层调用。 -------DALFactory----- 抽象工厂,用于创建各种数据对象的方法,这里有配置文件和反射的运用。 -------Model------- Model程序集,存放实体类,用于数据访问层和逻辑层调用 -------IDAL-------- 数据操作接口,数据访问层实现其接口并重写它(体现了面向接口的编程思想)。 -------Sqlserver---- 数据访问层,实现具体的select、update、delete....操作,重写IDAL接口。 -------DBUtility---- 数据访问类组件,这里使用的是SqlHelper 注:这是我参考一些多层架构的资料结合对多层的理解写的一个demo,用了两天时间,可能不是很标准,大家看的时候,有什么意见多多交流,一起探讨.分页那里还有点bug,不过我想以后再改进了(分页封装到数据层我总觉得不好),前台部分没有用控件(貌似一个高手告诉我,如果哪天你做.net不用控件了,你就可以了,汗一下!我就索性试一试。^_^)。有什么不合理的地方,欢迎提出来,我们一起学习,一起交流。 作者:李平
MySQL、MongoDBRedis都是流行的开源数据库软件。 MySQL是一种关系型数据库管理系统(RDBMS),广泛被用于Web应用程序和其他需要可靠数据存储的项目。它使用结构化查询语言(SQL)作为其查询语言,支持大规模数据存储和高效的数据检索。MySQL的优点包括可靠性、灵活性和广泛的社区支持。它可以处理大量的数据,因此适用于大型企业和复杂的数据处理需求。 MongoDB是一种NoSQL数据库,以其灵活性和可扩展性而闻名。它是一个面向文档的数据库,使用类似JSON的文档来存储数据。这个特点使得MongoDB能够轻松地存储和查询复杂的非结构化数据。MongoDB适用于大多数Web应用程序,特别是需要处理大量数据和具有快速读写需求的项目。 Redis是一种高速的内存数据存储系统,用于缓存和数据库应用程序。它被广泛应用于Web应用程序中的高速缓存需求,如页面缓存、会话存储和消息队列。Redis支持多种数据结构,如字符串、列表、集合和有序集合,并提供了丰富的API来处理这些结构。由于Redis将数据存储在内存中,它具有出色的性能和低延迟。 综上所述,MySQL、MongoDBRedis都有各自的优点和适用场景。MySQL适用于需要可靠和结构化数据存储的项目,而MongoDB适合于非结构化和高度可扩展的数据,Redis则适用于高速缓存和内存数据存储需求。根据具体的项目需求和性能要求,选择适合的数据库软件可以提高数据存储和处理的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值