ET源码学习(十一):ActorMessageSenderComponent

在学习这个源码前,先去看看ETBook上的Actor模型和Actor Location文章

ETBook Actor笔记

  • ET是单线程多进程架构,不需要重写一套Profiler工具,不需要考虑多台物理机问题,缺点是消息跨进程传输需要序列化及反序列化。
  • 多线程开发对于公共变量的访问需要加锁,会变得很难维护
  • Actor模型是服务器消息通信机制和客户端是没有什么关系的。ET客户端使用这个Actor完全是因为Gate需要对客户端消息进行转发。

在学习InnerMessageDispatcher中对于IActorResponse分发时利用了ActorMessageSenderComponent的RunMessage。这节来看ActorMessageSenderComponent组件


先看消息处理类,这2个和上一节的AMHandler和AMRpcHandler很相似
只不过参数从Session变成了Entity



属性中提到了超时时间,存放ActorMessageSender的及字典,已经超时的发送者等

ActorMessageSender


ActorMessageSenderComponent组件发送普通Actor消息
先看Awake,发现调用了TimerComponent的NewRepeatedTimer,这个方法是每隔1000ms执行一次Check

下面看看Check方法,可以看到主要是将超时的ActorMessageSender清除并设置超时Resp


Run函数,可以看到本质就是设置ActorMessageSender中将来要完成的任务Tcs的值。或者抛异常
这个函数就是在消息分发时对IActorResponse的处理


Send函数和Call函数
去NetInnerComponent拿到Session并发送,这个NetInnerComponent.Get没有找到将会去StartProcessConfigCategory拿到对应的数据,这个这一个配置


然后看Call
GetRpcId(this ActorMessageSenderComponent self)方法会执行++self.RpcId
每次发送自增RpcId,消息转化成stream

往下继续跟Call,ETTask对象池创建一个Tcs,然后加入字典requestCallback中,然后调用上面的Send方法。
最后开始等待Tcs的结果,记录发送消耗时间,最后返回返回的结果


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值