ET框架Actor使用与心得
Posted zhangliang111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ET框架Actor使用与心得相关的知识,希望对你有一定的参考价值。
经过这几天的研究、遇到了无数坑,经过了群主和群里的各位大佬一一指点,算了明白了Actor的使用和机制。
Actor是ET框架最核心的东西了,使用Actor之前一定要明白什么是分布式服务器,我简单说一下。
分布式简单说就是我有3台服务器共同为一个游戏服务、那么他们的关系是:
客户端第一次通信:
客户端-验证服务器-网关服务器-验证服务器-客户端
客户端通信(进行了第一次通信后):
客户端-网关服务器-其他功能服务器(DB、Map服务器Chat聊天服务器等)-网关服务器-客户端
也就是说所有数据都是统一通过网关服务器中转的。
例如:
A服务器(验证账号、网关服务器、位置服务器)。
B服务器(数据库操作简称DB)。
C服务器(Map服务器、Chat聊天服务器等)。
验证账号服务器(Realm):
验证操作流程:
1、验证账号的合法性(我是通过数据库的)。
2、根据配置文件找到网关的IP地址和端口、如果有多个就随机分配(这里可以做个负载均衡、例如判断网关服务器的人数进行分配)。
3、向Gate服务器发送数据,请求创建一个临时的KEY
4、这个KEY只有20秒的时间、超过了就自动销毁了、可以自己定义持续时间。
5、把接收到的KEY加上这个Gate服务器的IP和端口发送给客户端。
网关服务器(创建KEY、这个就不介绍了看图就明白了):
网关服务器(把当前服务器注册到Loaction服务器上):
操作流程:
1、首先查找临时KEY是否存在,不存在就表示是非法的,我代码里没有写这块。
2、使用创建一个Player、并设置ID。并添加到PlayerComponent组件里。
3、Actor消息转发是通过Player的UnitId来向位置服务器查找该发送到哪个服务器的。
4、至于PlayerComponent和UnitGateComponent是什么,自己看下代码吧,很容易理解的。
5、注册Actor转发(当注册了后、才能通过这个服务器转到消息到其他服务器)。
6、通过配置文件获取MAP服务器的IP和端口(可能有多个,我就用了一个所以我取了第一个、如果多个可以考虑用每个服务器的最大人数来分配,这个要自己实现了)。
7、向MAP服务器发送创建Actor请求(这块下面会有介绍MAP是怎么操作的)。
8、这里很重要、很重要、很重要(我当初就在这里耽误了很多时间,最我来说是个坑)、MAP服务器会发送一个m2GRegisterActorResponse.ActorId。
9、这个ActorId很重要、是MAP注册到位置服务器的ID,Actor发送消息会通过这个ID来转发到指定服务器的。
10、Actor消息转发是通过Player的UnitId来转发的,所以我把ActorId赋值给Player的UnitId。
MAP服务器(接收创建Actor请求):
操作流程:
1、创建一个UNIT,并指定这个是英雄类型的。
2、给UNIT添加ActorComponent并添加位置到位置服务器,这很重要,没有这个是没办法分发消息的。
3、把这个UNIT添加到ActorManagerComponent组件里,我个人理解这个是用来管理该服务器上所有的Actor对象。
4、把生成的UNITID发送出去。
总结:
完成以上就可以进行Actor转发了,只需要在MAP服务器先实现不同的Handler就可以。
大家认为的注册到位置服务器,不是注册一个服务器,而是每个对象的注册,比如:A客户端使用Actor,那位置服务器只是注册了A客户端的东西,B客户单使用,就在位置服务器注册B客户端的东西。
以上是关于ET框架Actor使用与心得的主要内容,如果未能解决你的问题,请参考以下文章