ET服务器框架学习笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、ET服务器怎么看?
  • 二、APP部分
    • 1.program代码
    • 2.game
    • 3.回到program
  • 总结


前言

今天开始有空来研究一下ET服务器框架,因为个人从事客户端大概8年时间了,一直想搞搞服务器,但是忙于各种需求中,现在有空就来研究一下,之前有段时间用的KBE,适合快速开发不求甚解的小伙伴去看下。


一、ET服务器怎么看?

ET服务端框架从总体看分为四个部分,如图:1.Server.App,启动项,包括服务器启动时,怎么将各种组件启动起来,组合成一个服务器;2.Server.Hotfix,热更业务,包括核心的通讯业务,游戏业务等等代码都在这里面;3.Server.Model存放都是各类业务都基础架构,为制作业务构建的业务框架底层;4.ThirdParty,包括kcp,protobuf,mongoDB等第三方等库。
ET服务器框架学习笔记_第1张图片

二、APP部分

1.program代码

可以看到代码里面只有1个main函数第一行至关重要(如下),这里应该是设置线程上下文,这样,熊猫大大(ET作者)给服务器内部做的异步函数执行完毕后都会回到这个线程上下文中来(个人理解,后面有新的理解再来修改):

// 异步方法全部会回掉到主线程
			SynchronizationContext.SetSynchronizationContext(OneThreadSynchronizationContext.Instance);

2.game

一个game相当于一个服务器游戏环境,里面包含一个scene类,这里需要看下继承关系scene,EnityComponentWithId,ComponentObject:

依次从基类说起:
Object:这个不用说,C#里面的基类
IDisposable:接口,继承这个接口,说明要有Dispose方法
Component:组件类,里面包含的核心东西:

  • InstanceId,实例ID,用来做唯一识别的
    IdGenerater.GenerateInstanceId();
  • Parent:也是一个组件,指向本组件添加到哪个组件(或组件派生类)上
  • IsFromPool:是否从对象池里面生成的
  • Dispose():销毁这个组件,从事件管理系统中进行销毁,回收自己便于下次从对象池里面拿
  • EndInit():暂时不知道干啥的,看内容应该是在事件系统中找对对应的组件序列化系统来反序列化这个组件
  • 附加:里面使用了Bson特性,MongoDB附带的功能类,用来序列化与反序列化一个对象用的。BsonIgnoreExtraElements:这个标记一个类,说明这个类在反序列化成类的时候,可以忽略多余的字段
    BsonIgnore:这个标记意味着序列化与反序列化会忽略这个字段

ComponentWithId类:带ID的组件

  • Id:无参构造则直接为生成的InstanceId,也可以由其他人指定

Entity:实体类,主要用于挂载,控制,管理各类component。

  • components:组件集合,使用hashset方式存储,无序的,优点是插入删除快速,不用重新排列,也可以防止重复项。貌似用来存储序列化组件的。
  • componentDict:组件字典,通过TYPE类型,对应一个组件,有点是通过type快速找到一个对应的组件
  • Dispose():释放时,会遍历字典componentDict中每个组件并调用他们的Dispose()
  • AddComponent():在这个enitiy上挂载一个组件,相同类型的组件只能挂一个,有几个重载,通过各种方式加载组件,注意要把组件parent设置成this,即这个entity
  • RemoveComponent():移除组件,也是各种方式,最终就是调用组件等dispose,然后在从entity的字典和集合中移除
  • EndInit():结束初始化,从序列化好之后的components中添加到字典里面去
  • 其他:获取某个组件,获取所有组件
  • 附加:ComponentFactory类,用于通过类型,参数等,通过对象池,或者通过反射方式实例化一个

Scene:继承了entity组件,封装为用于挂载各种管理组件,或者场景(虚拟化的)组件,个人理解为各类Entity的聚合地
Game:Game用于封装Scene,一个事件系统EventSystem,一个对象池ObjectPool,关闭时,即Close会调用Scene的Dispose,同时重置对象池与事件系统引用

3.回到program

有了基本的框架类,回到program再来看一下业务代码。下一节将分析各个基础的管理系统,即ECS中的S。


总结

ET框架真的牛逼,C#前后双端同一种语言开发也是柔顺湿滑,希望能够把这个框架搞完。

你可能感兴趣的:(c#,服务器)