【转】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客户端的东西。

猜你喜欢

转载自www.cnblogs.com/zhangliang111/p/11653163.html