ET6框架(十一)Actor消息


在这里插入图片描述


一、Actor模型

Actor之间通过消息来传递实现。
每个Actor都配有一个邮箱,我们称之为MailBox,MailBox将润滑缓存其他 Actor发来消息,
Actor从邮箱中按先进先出的顺序处理消息
Actor模型可以帮助消除同享状态,因为Actor之间具有隔离性,内部可以安全处理不需要考虑多线程中的锁机制。
可能会阻塞自己的逻辑,但是不会阻塞自己的线程,所以多个Actor可以同时进行消息的传递及处理。
在这里插入图片描述


二、Actor消息发送

Acotr模型中有个非常重要的概念,即是Actor地址。
因为当一个Actor需要和另一个Actor通讯时,必须通过这个地址。
ET框架考虑到式的网络环境,通过Entity的InstanceId对Actor进行了抽象并屏蔽了不同进行间的差异。
在这里插入图片描述


三、ActorLocation

虽然在Actor模型中只需要知道对方的InstanceId地址就能发送,但是当Actor在不同进程中转移时InstanceId地址将发发生变化。
为此ET框架提供了ActorLocaltion机制,这个机制增加了Location定位服务,Entity通过自身的ID和InstanceID,使得消息可以发送到目标Entity进行处理。
在这里插入图片描述


四、举例说明:

我们打开OuterMessage.proto,如下图定义C2M_TestActorLocationResponse从客户端到Map服务器.指定类型为// IActorLocationRequest,并指定返回类型.
定义M2C_TestActorLocationResponse 从Map服务回到Client客户端消息.指定类型为IActorLocationResponse
再定义无返回消息类型,C2M_TestActorLocationResponse从客户端到Map服务器,指定类型为IActorLocationMessage,注意与普通消息不同这里需要固定字段RpcId
再定义M2C_TestActorMessage 定义类型 //IActorMessage 此类型不需要经过网关服务器,因此不需要使用RpcId
在这里插入图片描述

在消息格式编写完后,需要点击ET > Proto 文件夹下的win_startProtoExport.bat文件
在这里插入图片描述

客户端消息处理
我们在客户端编写代码,打开Client > Unity.Hotfix > Demo > Scene 打开SceneChangeHelper.cs 在SceneChangeTo方法下方添加代码
和之前普通消息一样的方式发送
在这里插入图片描述
在Client > Unity.Hotfix > Demo > Login 下创建此类 用于接收M2C_TestActorMessage类型的消息
在这里插入图片描述
服务器端消息处理:
我们打开Server > Server.Hotfix > Login中添加下面两个脚本,用于处理客户端发送的C2M_TestActorLocationRequest以及C2M_TestActorLocationMessage类型的消息
需要注意的是这里拿到的是客户端的Unit.以及记得为消息打上标签
在这里插入图片描述
在这里插入图片描述

至此我们可以编译全部代码


五、查看结果

在完成上面步骤后我们编译所有代码,然后运行服务器
在这里插入图片描述

然后运行回到Unity编辑器中,按F5编译资源,运行项目点击登录 > Enter 进入到游戏中
至此我们可以看到客户端的所以打印

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值