ET 框架笔记【转载】
ET框架笔记 (笑览世界写)(转)
客户端
1.使用unity2017.2.0版本及以上2018版以下,编译原始版ET客户端报没有引用错误时,删除hoxfit下引用的UnityEngine.dll和UnityEngine.UI.dll,重新引用…\Editor\Data\UnityExtensions\Unity\GUISystem文件下的unityfengine.UI.dll和引用…\Editor\Data\Managed\UnityEngine 文件下的UnityEngine.dll和UnityEngine.CoreModel.dll,注意UnityEngine.dll和UnityEngine.CoreModel.dll必须都为…\Editor\Data\Managed\UnityEngine 文件内的,不然会报错。
2.使用2018版本,同上另外需要重新引用项目Assembly-CSharp.dll和Assembly-CSharp-firstpass.dll即ET的Unity项目dll和ET的Unity.Plugins的dll,删除所有失效的dll,不然编译报错需引用Assembly-CSharp.dll和Assembly-CSharp-firstpass.dll。另外安卓SDK别更新最新的Android SDK Build-tools 28rc1工具。
3.unity2017.2.0版本及以上,你还可能用到的类库为:UnityEngine.PhysicsModule.dll,若出现如下截图错误,可在如下文件夹目录下引用它…\Editor\Data\Managed\UnityEngine ,根据实际情况添加,也可能会出现其它报错,需要引用对应的dll,当然不怕麻烦或者为了不报类似错可以把如下文件夹目录…\Editor\Data\Managed\UnityEngine下的所有dll全部引用。2017.2.0及以上的版本把unity的dll按系统分类拆分成很多个,所以需要分别引用需要的dll。
4.如果Hotfix报关于UI的Canvas的错,需要在Hotfix中添加UnityEngine.UIModule.dll。
5.(可选)使用unity2017.2.0以下版本,编译原始版ET客户端报没有引用错误时,删除hoxfit下引用的UnityEngine.dll和UnityEngine.UI.dll,重新引用…\Editor\Data\UnityExtensions\Unity\GUISystem文件下的unityengine.UI.dll和引用…\Editor\Data\Managed 文件下的UnityEngine.dll。
6.Microsoft Visual Studio使用15.5.4以上版本,否则Unity可能会加载不了Hotfix.dll。如果加载不了需要自行重新引用Hotfix.dll。
7.安装VS2017、unity2017及以上版本后,按流程操作无误,可能仍出现问题,可重启计算机试试。
注:
1.在运行和打包时,关闭全局配置界面,避免出现报错干扰。
2.Tool上ILRuntime的生成工具是为了给ILRuntime提速用,需先加上ILRuntime的宏再点击上面的两个按钮,不然会报错或者无法正常生成。
3.在2018中打包需要Api Compatibility Level选择 .NET4.X库,不然会报Bson的错。
客户端修改界面步骤:
调试方法:
1、unity设置标记输入框里的ILRuntime宏删除。
2、在VS里重新生成解决方案
3、工具菜单标记资源包在点PC生成资源包菜单
4、将Release文件夹下的PC文件夹替换掉主工程文件夹(LandlordsCore-master)文件夹下的PC文件夹
5、热更时恢复unity宏标记设置
增加界面:
1.在Global/UI下添加需要增加界面(如:NewUI)的父物体(如:NewUIParent),在UI的ReferenceCollector上添加界面的父物体(NewUIParent)的引用。
2.需要增加的界面(NewUI)添加CanvasConfig并将CanvasName设置为需要增加界面的父物体(NewUIParent)的名字。
3.在UIType枚举里面添加枚举成员(如:BEnum)。
4.模仿UILoginFactory类新建一个UI***Factory类,在界面添加按钮处调用打开方法:Hotfix.Scene.GetComponent<UIComponent>().Create(UIType.BEnum);
5.在新增加的界面(NewUI)做逻辑处理须模仿UILoginComponent类新建一个UI***Component类,在类中实现想要的效果;在新增加的界面(NewUI)的ReferenceCollector组件上需要的引用。
6.热更时须打开unity设置标记输入框里的ILRuntime宏,Hotfix工程添加ILRuntime宏(属性—–>生成–>条件编译符号处加上 ILRuntime,重新生成修改过的工程,如不添加宏会无法启动。
7.点击工具菜单Tools–>打包–>设置标记–>设置标记,再Tools–>打包–>PC生成资源,将Release文件夹下的PC文件夹替换掉主工程文件夹(LandlordsCore-master)文件夹下的PC文件夹。
热更时,只能hotfix拓展Model中的类,model无法拓展hotfix中的类,热更的拓展方法只能放在hotfix中,model中不能调用hotfix中的方法。
服务端(基于哲学棋牌Demo)
各服务器作用
注:按需将整个系统拆分成不同的进程。比如你需要一个单独处理聊天的服务器进程,那么可以增加Chat进程。根据需求配置服务器功能。
1.Manager:连接客户端的外网和连接内部服务器的内网,对服务器进程进行管理,自动检测和启动服务器进程。加载有内网组件NetInnerComponent,外网组件NetOuterComponent,服务器进程管理组件。自动启动突然停止运行的服务器,保证此服务器管理的其它服务器崩溃后能及时自动启动运行。
2.Realm:对ActorMessage消息进行管理(添加、移除、分发等),连接内网和外网,对内网服务器进程进行操作,随机分配Gate服务器地址。加载有ActorMessage消息分发组件ActorMessageDispatherComponent,ActorManager消息管理组件ActorManagerComponent,内网组件NetInnerComponent,外网组件NetOuterComponent,服务器进程管理组件LocationProxyComponent,Gate服务器随机分发组件。客户端登录时连接的第一个服务器,也可称为登录服务器。
3.Gate:对玩家进行管理,对ActorMessage消息进行管理(添加、移除、分发等),连接内网和外网,对内网服务器进程进行操作,随机分配Gate服务器地址,对Actor消息进程进行管理,对玩家ID登录后的Key进行管理。加载有玩家管理组件PlayerComponent,ActorMessage消息分发组件ActorMessageDispatherComponent,ActorManager消息管理组件ActorManagerComponent,内网组件NetInnerComponent,外网组件NetOuterComponent,服务器进程管理组件LocationProxyComponent,Actor消息管理组件ActorProxyComponent,管理登陆时联网的Key组件GateSessionKeyComponent。对客户端的登录信息进行验证和客户端登录后连接的服务器,登录后通过此服务器进行消息互动,也可称为验证服务器。
4.Location:连接内网,服务器进程状态集中管理(Actor消息IP管理服务器)。加载有内网组件NetInnerComponent,服务器消息处理状态存储组件LocationComponent。
5.Map:连接内网,对ActorMessage消息进行管理(添加、移除、分发等),对场景内现在活动物体存储管理,对内网服务器进程进行操作,对Actor消息进程进行管理,对ActorMessage消息进行管理(添加、移除、分发等),服务器帧率管理。ActorMessage消息分发组件ActorMessageDispatherComponent,ActorManager消息管理组件ActorManagerComponent,内网组件NetInnerComponent,服务器进程管理组件LocationProxyComponent,服务器帧率管理组件ServerFrameComponent。
6.AllServer:将以上服务器功能集中合并成一个服务器。另外增加DB连接组件DBComponent,DB管理组件DBProxyComponent。
7.Benchmark:连接内网和测试服务器承受力。加载有内网组件NetInnerComponent,服务器承受力测试组件BenchmarkComponent。
数据库(基于哲学绅士的ET棋牌Demo)
数据库组件
一、Hotfix
1.DBQueryBatchRequestHandler : AMRpcHandler<DBQueryBatchRequest, DBQueryBatchResponse>
批量加入数据库缓存字典。
2.DBQueryJsonRequestHandler : AMRpcHandler<DBQueryJsonRequest, DBQueryJsonResponse>
通过json批量加入数据库缓存字典。
3.DBSaveRequestHandler : AMRpcHandler<DBSaveRequest, DBSaveResponse>
保存数据到数据库。
4.DBSaveBatchRequestHandler : AMRpcHandler<DBSaveBatchRequest, DBSaveBatchResponse>
批量保存数据到数据库。
5.DBQueryRequestHandler : AMRpcHandler<DBQueryRequest, DBQueryResponse>
数据添加到数据库缓存字典。
二、Model
1.InnerMessage类中包含数据请求和数据回复相关的类。
(1)、数据请求类继承ARequest,包含有DBQueryRequest缓存请求类、DBQueryBatchRequest批量缓存请求类、DBQueryJsonRequest用Json缓存请求类、DBSaveRequest数据保存请求类、DBSaveBatchRequest数据批量保存请求类。
(2)、数据回复类继承AResponse,包含有DBQueryResponse缓存回复类、DBQueryBatchResponse批量缓存回复类、DBSaveResponse数据保存回复类、DBSaveBatchResponse数据批量保存回复类。
2.DBProxyComponent:用于进行数据缓存保存和保存到数据库操作。
3.DBComponent:连接数据库。
4.DBCacheComponent:数据库缓存组件。
5.DBTask类的子类DBSaveTask执行数据保存、DBSaveBatchTask批量数据保存、DBQueryTask查询数据库保存至数据缓存字典、DBQueryBatchTask批量查询数据库保存至数据缓存字典、DBQueryJsonTask用Json查询数据库保存至数据缓存字典。
三、数据库读写
(1)、原版ET数据库读写
1.创建需要读写的类,继承Entity。
2.读写数据,调用DBProxyComponent类中的方法查询或者保存。
查询方法有Query<T>(long id, bool needCache = true)按类名的ID查询、QueryBatch<T>(List<long> ids, bool needCache = true)批量按类名的ID查询、QueryJson<T>(string json, bool needCache = true)按类名用json进行自定义查询。
保存方法有Save(Disposer disposer, bool needCache = true)按保存类中数据、SaveBatch(List<Disposer> disposers, bool needCache = true)批量保存类中数据、Save(Disposer disposer, bool needCache, CancellationToken cancellationToken)定时保存超时取消保存,保存时需要 EntityFactory.CreateWithId<AAA>(IdGenerater.GenerateId());实例化需要保存的类,AAA为需要保存的类名。
(2)、棋牌Demo数据库读写
1.创建需要读写的类,继承EntityDB。
2.EntityDB类上方添加标签 [BsonKnownTypes(typeof(AAA))],AAA为需要读写的类名。
3.读写方法与原版ET相同。
ET添加修改消息
消息发送接收路线:例如消息发送路线:客户端–>网关服务器–>内部功能服务器–>网关服务器–>客户端,游戏启动时通过标签将协议码为键、消息类为值存入字典,将消息请求类作为键、消息处理类作为值存入字典,将消息通过下文第四步中的Session类由AChannel类Send发送,通过TCP或UDP发送到目标网关服务器,网关服务器接收到消息由网关消息助手类处理发给内部功能服务器,内部功能服务器处理的消息处理类处理,通过消息回复类作为载体将消息回传消息给网关服务器,网关服务器消息处理助手类中由消息回复类作为载体接收好数据被消息处理助手类回传给客户端,客户端用相同的消息回复类接收回传的数据进行使用。
服务器收发消息通过网关服务器gate进行,gate接收消息后根据情况将消息分发给其它服务器处理,其它服务器处理后消息回传给gate,再由gate发给客户端。
内部功能服务器实现分布式服务器功能:除Manager管理服务器和Location转发Actor的服务器之外的服务器均作为路由服务器,ActorProxyComponent消息管理组件作为路由信息存储组件存储本服务器使用的消息ID和ActorProxy类处理Actor消息类(发送、接收等),先读取路由信息存储组件中的缓存,缓存没有的情况下会由ActorProxy通过LocationProxyComponent服务器消息处理状态存储组件向Location转发Actor消息IP对应的编号、管理服务器发送key(Actor消息ID),Location服务器通过LocationComponent处理其它服务器发送的Actor消息ID获取消息的对应的IP,请求IP对应编号的服务器通过ActorProxyComponent或UnitGateComponent类读取IP编号,然后通过IP编号能获取到对应的IP和端口,从而发送消息给目标服务器。从Location服务器收到的Actor消息IP对应的服务器IP编号会存储在本地服务器缓存。
此分布式服务器框架如果不够用,瓶颈在于Location服务器的消息处理速度,可增加location服务器数量解决:在将Actor消息的ID与与所在服务器的IP对应编号作为消息传给所有Location进行进行同ETDemo中Location服务器相同的处理,在处理Actor消息时,只需要向多个location服务器中的任意一个发送消息即可获取到Action消息对应的IP编号。此方法瓶颈在于location服务器内能存储的Action消息ID和IP编号的键值对个数。
此分布式服务器框架类似于即时通信服务器架构中的一种,Location服务器提供存储和查询目标消息服务器的IP服务:
https://www.cnblogs.com/myd620/p/6081100.html 即时通信服务器架构
http://blog.csdn.net/u010738184/article/details/49472795
分布式系统 (大规模分布式系统原理解析和架构实践)
https://www.cnblogs.com/liulun/p/3625941.html
分布式缓存服务器设计原理
一、Actor消息
1.在协议码类Opcode类添加协议码。
2.在OuterMessage文件中添加消息类。
如果需要序列化添加protobuf序列化标签[ProtoContract]
注册消息标签[Message(Opcode.Frame_ClickMap)]
帧消息继承帧同步抽象类AFrameMessage
添加protobuf属性序列化标签[ProtoMember(int a)],a为唯一
3.添加消息实现类。
添加消息实现标签[MessageHandler((int)Opcode.XX)],XX参数为对应的消息协议码
继承消息实现的抽象类AMHandler<BB>,BB参数为对应消息的消息类,需要序列化则添加protobuf相关标签。此类为消息接收方接收到消息后处理消息的类。
4.添加消息转发组件
5.发送消息
通过SessionComponent类中SessionComponent.Instance.Session调用Session中的方法发送消息。
客户端:
服务端:
附:来自TIM的在线文档”ET框架笔记”,点击查看:
https://docs.qq.com/doc/BBHvys04uyFR11t2171PDPa34yGBCe2XqPFc3
关注 - 3
粉丝 - 14
» 下一篇:ET开源框架做完的项目整体部署到Linux服务器的步骤(转)
</div><p class="postfoot">posted on <span id="post-date">2018-10-04 20:14</span> <a href="https://www.cnblogs.com/cnxkey/">qiubs</a> 阅读(<span id="post_view_count">35</span>) 评论(<span id="post_comment_count">0</span>) <a href="https://i.cnblogs.com/EditArticles.aspx?postid=9743247" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(9743247);return false;">收藏</a></p>
</div>
ET 框架笔记【转载】相关推荐
- Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介
1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...
- ET框架笔记 (笑览世界写)(转)
客户端 1.使用unity2017.2.0版本及以上2018版以下,编译原始版ET客户端报没有引用错误时,删除hoxfit下引用的UnityEngine.dll和UnityEngine.UI.dll, ...
- msm8996平台的 camera 框架笔记
msm8996平台的 camera 框架笔记 标签(空格分隔): camera 文章目录 msm8996平台的 camera 框架笔记 @[toc] 0 前言 1 kernel中的camera结构 1 ...
- 解读基金—读书框架笔记①
解读基金-读书框架笔记① 基础概念 投资目标的确定 基金风险 投资金额比例 & 投资时间 复利计算"72"法则 & 基金选择的关键点 基金基础知识 & 品种 ...
- Android O Treble框架笔记(基于高通845平台)
Android O Treble框架笔记(基于高通845平台) tags: android 文章目录 Android O Treble框架笔记(基于高通845平台) @[toc] **0 前言** * ...
- Android O 的camera framework-hal层框架笔记(基于高通845平台)
Android O 的camera framework/hal层框架笔记(基于高通845平台) tags: android camera 文章目录 Android O 的camera framewor ...
- 织梦轻量级mvc框架笔记
为什么80%的码农都做不了架构师?>>> 织梦cms简单易用 是我们这些水货站长首选的cms 但随着功能的扩展,织梦好像渐渐的变得臃肿不堪,可扩展性不好,结构不是很清晰 , ...
- JBI学习笔记(转载于gaolin_bei)
2019独角兽企业重金招聘Python工程师标准>>> 业界正在广泛寻求解决 B2B 以及 EAI (企业应用集成)所存在问题的方案.这些方案不同于基于 JMS 手段的面向消息中间件 ...
- 框架笔记:记录XLua的简单接入
阅前提示 本系列为作者在学习框架与编写框架时的心得与笔记 适合人群:All 阅读方式:工具文章 本系列会不断更新,如果对你有所帮助,点赞收藏吧:) 文章目录 阅前提示 XLua 配置 [LuaCall ...
最新文章
- 拆解一个舵机组成的机器人
- docker run后台启动命令_Docker命令详解之run
- 抛出错误Debug Assertion Failed!
- 3Dslicer2:数据与帮助
- 加拿大达内科技_美股继续暴跌模式 达内教育却“暴走”股价近翻倍
- 大数据 -- Hadoop集群环境搭建
- COSCon'18 面向全宇宙招募志愿者啦!
- 数据分箱2——等频、等距分箱
- c语言按键实现跳转程序,C语言中的跳转语句
- [Swift]LeetCode85. 最大矩形 | Maximal Rectangle
- vscode 连接服务器jupyter_VScode中使用jupyter notebook
- python html转图片失真_html dom 转化成图片踩坑记(canvas toDataURL)
- sysrq 和 sysrq-trigger
- matlab比较判断简写,MATLAB一词来自( )的缩写。
- java 导出word简历_java导出生成word(类似简历导出)
- 判断某整数是正整数、负整数还是零
- 20145325张梓靖 《信息安全系统设计基础》第13周学习总结
- 图片翻译文字软件哪个好?图片翻译软件推荐。
- Numpy:随机抽样
- HTML5+JS游戏开发模块----canvas打字游戏
热门文章
- Servlet实现简单的前后端交互
- oracle的nextval乱序
- python语言中tup的意思_Python基础知识: 元组
- 蒜头君:所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘 33 加 11,如果是偶数,则除以 22,得到的结果再按照上述规则重复处理,最终总能够得到 11。如,假定初始整数为 5
- Tusimple数据集生成二值化和实例化图片
- mysql 中 case语句吗_Mysql中的Case语句
- golang 闭包函数的应用技巧
- Lunux 小火车and流星雨 2021-01-12
- 从0开始,手把手教你用Vue开发一个答题App
- DirectX12渲染物体的初始化流程