et框架的构建块主要由entity和componet组成,类似unity的组件。一个Entity可以挂载多个不同Component。Entity和Component的共同基类Disposer用于提供对象池和事件机制。所有Disposer的派生类都可以从对象池中获取。

entity的构造函数会调用IdGenerator类来根据服务器id当前时间以及一个自增计数组合出一个唯一的id。对象池Fetch对象的时候也会用这个IdGenerator生成新的唯一Id。通常使用EntityFactory.Create方法创建Entity实例,这样会先从对象池获取,随后注册到全局事件管理器ObjectEvents。

Disposer创建时会被注册进单例的ObjectEvents,如果它实现了ILoad,IUpdate,IStart,就会注册进相应的列表,在ObjectEvents启动,更新或者载入的时候触发对应的事件处理方法(此方法在接口中定义)。

Disposer实现了IDisposable,在使用using或者手动调用Dispose之后会被对象池回收。

et框架的服务端启动项目是app.proj 里面只有一个带main的program类型。et自定义了一个OneThreadSynchronizationContext,在有异步回调到来的时候保存delegate和参数到一个多线安全的队列,然后在后面的主循环中调用update,在主线程中取出本次主循环产生的所有异步回调,从而保证了所有的回调函数都被捕捉到单一主线程执行。在主线程中多用await和async既符合顺序的思考习惯,避免了很多的回调定义分散在多个函数中,又可以在等待某一异步操作完成时自动将执行权交给调用函数的后续代码,避免了单线程主线挂起而永远等不到回调完成的问题。单线程的架构既避免了各种多线编程的复杂性和问题陷阱,又可以在组织服务器集群时根据服务器cpu支持的线程数合理启动数量相当的进程来充分发挥服务器计算能力,避免了过多线程造成的上下文切换开销,有利于总体性能的提高。

et框架的启动项目是App.proj,其中只有一个Program类,类中包含入口函数Main。

启动之后首先注册Model程序集中提供的各种基础模型类,随后加载Hotfix中可以热更新的类型并且注册到ObjectEvents。一方面是提供IAwake ILoad IUpdate接口中的事件处理,一方面检索各类Attribute并且注册到相应容器中以便后续查找。

Game.Scene是很重要的单例实体,其上的component代表了服务端进程能提供的基础功能集合。

OptionComponent和StartConfigComponent用来读取unity中设定的服务器集群配置,给后续的启动步骤留下依据。

后续OpcodeTypeComponent和MessageDispatherComponent提供服务端进程相应网络消息回调的功能,这个所有种类的服务端进程都需要。

随后是根据本身的appid添加自身需要的Component。这些具体的组件后续的文章会继续介绍。最后是进入服务端主循环:每此循环休息1ms防止CPU占用过高;处理发生的异步回调;处理各种IDisposer的update事件。

服务端的设计思路和基本运行流程就到这里,后续会再介绍框架的其他方面。

参考资料:

搞懂SynchronizationContext:http://www.cnblogs.com/lzxianren/p/SynchronizationContext.html

作者:fancybit

qq:148332727

egametang框架服务端运行流程的更多相关文章

  1. Rsync服务端部署流程

    Rsync服务端部署流程       Rsync服务端部署流程: 一.rsync服务端配置流程 配置rsync配置文件/etc/rsyncd.conf 创建同步的本地目录/dingjian 并根据需要 ...

  2. cas 服务端认证流程

    CAS服务端流程分析 'CAS单点登录服务器端的登录流程' -----流程的配置在/WEB-INF/login-webflow.xml文件中 <var name="credential ...

  3. react+redux教程(六)redux服务端渲染流程

    今天,我们要讲解的是react+redux服务端渲染.个人认为,react击败angular的真正“杀手锏”就是服务端渲染.我们为什么要实现服务端渲染,主要是为了SEO. 例子 例子仍然是官方的计数器 ...

  4. PyV8在服务端运行自动崩溃问题

    近来想在服务端架设WSGI + PyV8去自动解析JavaScript代码,然后返回解析后的数据给客户端.但是发现,在nginx配置后,客户端一请求,服务端的python脚本自动崩溃. 见代码: de ...

  5. Netty服务端创建流程及组件职责

    public class NettyServer { public static void main(String[] args) throws InterruptedException { NioE ...

  6. springMVC框架介绍以及运行流程(图解)

    1 Springmvc是什么? spring web mvc和struts2都属于表现层的框架,spring web mvc是spring框架的一部分(所以spring mvc与spring之间不需要 ...

  7. HTTPS 客户端验证 服务端证书流程

    网上的文章很多, 但是对摘要的验证流程不够通俗易懂. QQ截图20160420114804.png 证书预置和申请 1:客户端浏览器会预置根证书, 里面包含CA公钥2:服务器去CA申请一个证书3: C ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  9. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

随机推荐

  1. win7系统如何在防火墙里开放端口

    用到的端口需要在防火墙里开放,win7的比XP的要复杂一些,此方法同样适用于server2008系统 方法/步骤 1 依次点击"开始"-"控制面板"-" ...

  2. 怎样实现给DEDE的栏目增加栏目图片(2)

    2.3 打开dede/templets/catalog_edit.htm页面,查找 栏目名称:

  3. phpmailer的SMTP ERROR: Failed to connect to server: 10

    请问,我在win7上学习使用phpmailer时,出现这种错误怎么处理啊? SMTP ERROR: Failed to connect to server: (0) SMTP connect() fa ...

  4. Aliase_小白学Python_Day0_前言

    听到有老师介绍,说你为什么不把你的学习过程保存下来,一是当做总结,二是作为分享.我想,也对.这算是我的第一个博客,本次想写写我为什么选择学习Python. 很多人都问过我一个问题,行业那么多,你为什么 ...

  5. 积分图实现均值滤波的CUDA代码

    没想到我2010年买的笔记本显卡GT330M 竟然还能跑CUDA,果断小试了一把,环境为CUDA6.5+VS2012,写了一个积分图实现均值滤波.类似于OpenCV的blur()函数. 使用lena. ...

  6. JAVA正则表达式 Pattern和Matcher

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...

  7. JavaScript URL传值过程中遇到的问题及知识点总结

    JavaScript URL传值过程中遇到的问题及知识点总结 Web系统开发过程中经常用到URL进行传值,刚刚接触时不太会解析,会出现中文乱码问题等. 1.父子页面之间的传值(在一个页面中以加载ifr ...

  8. visual studio 中无法删除项目或者文件

    vs 2012添加新项目或者类库后,里边的class文件,我不想要,就把它删除.但是删除的时候,报如下图的错误,我删除新建的项目或类库的时候,也报类似的错误,怎么解决? window系统是新安装的.也 ...

  9. 了解JDK 6和JDK 7中substring的原理及区别

    substring(int beginIndex, int endIndex)方法在jdk 6和jdk 7中的实现是不同的.了解他们的区别可以帮助你更好的使用他.为简单起见,后文中用substring ...

  10. PUTTY无法远程连接服务器故障解决[转]

    对于一个刚刚了解putty工具的新手来说,在putty工具使用中有时出现了问题而无法解决.今天就来介绍怎么解决putty无法远程连接服务器的故障. 用putty远程连接服务器时,提示错误 server ...