先看一下网络组件的中层:

AService抽象了udp和tcp协议的连接工厂,udp的连接方式也被封装的和tcp类似,但是一个接收连接的UService只能建立一个连接。这个接口既可以做服务端通过AcceptChannel接受其他地址的连接,也可以作客户端调用ConnectChanel向其他地址发出连接请求。

AChannel抽象了tcp和udp的连接信道,由AService创建,可以用于收发字节数据。

udp的底层使用了ENet,提供了可靠有序的udp通信。

然后再来看网络组件的上层类图:

NetworkComponent是其他上层网络访问组件的基类,内部有一个AService字段。使用tcp做服务端的时候可以创建多个Session,每个Session都是一个连接的高层抽象。这个类型在服务端和客户端项目公用,其提供的MessageDispatch和MessagePacker仅在客户端项目使用。服务端分发消息需要附加另外的MessageDispatcher组件。

向session另一端做rpc调用可以调用它的Call方法,发送消息可以调用Send,二者的区别在于是否需要服务器响应一个反馈消息。定义消息或者rpc请求的时候使用Message标签设置消息类型与opcode的对应关系。

接收并响应Session另一端发来的消息是通过OuterMessageDispatcher或者InnerMessageDispatcher。如果是Actor消息或者请求会先把消息分发给Actor,否则获取服务端Game.Scene上的MessageDispatherComponent然后这个组件会根据消息的类型用OpcodeComponent找出对应opcode分发给相应的IMHandler处理。注册新的消息handler只需实现AMHandler或者AMRPCHandler(RPC调用)然后用MessageHandler标记这个handler生效的服务器类型。

服务端的NetOuterComponent用于通过外网进行连接,比如Gate服务器和玩家电脑之间的连接。

NetInnerComponent用于服务器组之间的内部通信,通过ip和端口号创建或者使用已有的Session来发消息或者调用rpc。

创建Session也可以使用NetworkComponent.Create()方法

egametang网络系统组件的更多相关文章

  1. Microsoft Windows Server DHCP

    Microsoft Windows Server DHCP DHCP IP地址第一个来源是DHCP服务器,第二个来源是PPP点对点协议(ADSL为PPPOE);DHCP是Dynamic Host Co ...

  2. IT基础架构规划方案一(网络系统规划)

    背景                   某集团经过多年的经营,公司业务和规模在不断发展,公司管理层和IT部门也认识到通过信息化手段可以更好地支撑公司业务运营.提高企业生产和管理效率.同时随着新建办公 ...

  3. Unity3d&C#分布式游戏服务器ET框架介绍-组件式设计

    前几天写了<开源分享 Unity3d客户端与C#分布式服务端游戏框架>,受到很多人关注,QQ群几天就加了80多个人.开源这个框架的主要目的也是分享自己设计ET的一些想法,所以我准备写一系列 ...

  4. egametang启动配置

    egametang的启动配置文件可以在Unity的Tools->命令行配置中修改保存然后启动 如果需要添加自定义的启动配置项目,只需要修改客户端的 ServerCommandLineEditor ...

  5. TCPClient组件和TCPServer组件的主要方法和属性

    IdTCPClient属性1 : IOHandler 如果有相应的输入/输出操作,那么IOHandler相对应的组件或接口将提供一个虚拟/抽象的输入/输出接口给相应的网络连接2 : Intercept ...

  6. Openshift V3系列各组件版本

    Openshift V3.* 系列各组件版本 Components 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.9 3.10 3.11 Core Components dock ...

  7. 华为云计算IE面试笔记-Fusionsphere架构及组件介绍(服务器虚拟化解决方案)

    eDSK   最上层则是eDSK是我们FusionSphere服务器虚拟化解决方案中的虚拟化北向统一API接口,其他的第三方系统或者是其他运营平台(FC.VMware等)可以通过eDSK轻松完成无缝对 ...

  8. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  9. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

随机推荐

  1. No input file specified的解决方法apache伪静态

    http://jingyan.baidu.com/article/dca1fa6f8d623ff1a44052e8.html (一)IIS Noinput file specified 方法一:改PH ...

  2. putty怎么用?如何使用Putty远程管理Linux主机

    Putty是一个免费的Windows 32平台下用于telnet.rlogin和ssh客户端的远程客户端工具,可以通过PUTTY快速的实现SSH连接linux等主机,下面小编就给大家演示一下如何使用P ...

  3. tp5 加载第三方扩展类库与手动加载的问题

    =============================================================== <?phpnamespace my; /*** 加载第三方类库*/ ...

  4. ngRx 官方示例分析 - 6 - Effect

    @ngrx/effect 前面我们提到,在 Book 的 reducer 中,并没有 Search 这个 Action 的处理,由于它需要发出一个异步的请求,等到请求返回前端,我们需要根据返回的结果来 ...

  5. 基于 HTML5 WebGL 的 3D 网络拓扑结构图

    现在,3D 模型已经用于各种不同的领域.在医疗行业使用它们制作器官的精确模型:电影行业将它们用于活动的人物.物体以及现实电影:视频游戏产业将它们作为计算机与视频游戏中的资源:在科学领域将它们作为化合物 ...

  6. 使用 cURL 度量 Web 站点的响应时间

    curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.canada.com 0. ...

  7. subList ArrayList LinkedList

    List<E> subList(int fromIndex,int toIndex) 该方法返回原有集合从fromIndex 到 toIndex之间一部分数据,组成一个新的集合,这两个集合 ...

  8. WebSphere--部署Servlet

    在WebSphere应用服务器上部署 Servlet需要四个步骤:编译 Servlet 或 Web 应用程序.将类文件放到 WebSphere应用服务器上.将相关的 HTML.JSP 和 SHTML ...

  9. TinyXML 的简单介绍以及使用

    先说几句重点: 1,tinyxml 生成或解析XML非常好用 2,tinyxml 利用DOM(文档对象模型)操作XML,根节点与各个子节点相当于形成一棵树 3,只要你了解tinyxml的用法,可以只n ...

  10. maven的聚合和继承

    Maven的聚合特性能够把项目的各个模块聚合在一起构建: 而Maven的继承特性则能帮组抽取各模块相同的依赖和插件等配置,在简化POM的同时,还能促进各个模块配置的一致性. 聚合:新建一个项目demo ...