akka.net Tell(object)vs tell(object,IActorRef)
问题描述:
有什么区别?据我了解,Tell(对象,IActorRef)发送原始发件人。但为什么不使用Forward方法?akka.net Tell(object)vs tell(object,IActorRef)
谢谢
答
你能想到的actorRef.Tell(msg)
为actorRef.Tell(msg, Context.Self)
的快捷方式,而actorRef.Forward(msg)
保持原始发件人。这也意味着,你需要在后台有一个活跃的角色上下文来定义任何有意义的发件人。
使用Tell(object, IActorRef)
允许你发件人设置为任何你喜欢的演员ref时,包括像模拟作为另一演员或ActorRefs.NoSender
,其可以用于例如减少的有效载荷的大小发送通过线路,作为消息发送者赢得”序列化。
在某些远程方案中,如果您不希望发送答案给Sender
,则使用actorRef.Tell(msg, ActorRefs.NoSender)
可能会带来很好的性能优势。
为什么? IActorRef
被序列化为URI字符串(例如:akka.tcp:// system-name @ localhost:9001/user/parent/child)。当您发送小消息即股票价格蜱或游戏角色位置发生变化时,这可能意味着有效负载中最昂贵的部分实际上是发件人。
反序列化IActorRef
也需要一些额外的时间,因为actor提供者需要为它解析正确的消息传输。
由于这些原因,如果您不需要Sender
,则使用ActorRefs.NoSender
可能是一个有效的选项。
令人惊叹的答案。谢谢! – tk1977tk