演员B必须更改C和A之间的回复消息吗?
如果不是,演员B应该使用B forward "msg"
而不是B ! "msg"
. 这将保留发件人信息。当C使用回复时,不经过 B就自动将答案发送给A :
A sends message to B (b ! "msg")
B forward the message to C (c forward "msg")
C replies to A (self.reply ! "msg3")
如果是,请获取发件人ActorRef
并将其与消息发件人参考一起传递。
例如,使用一个简单的元组:
A sends message to B (b ! "msg1")
B sends message to C, with the sender reference (c ! ("msg2",self.sender) )
C replies to B adding the reference it received (self.reply ! ("msg3",ref) )
B replies to A ( ref ! "msg4" )
这里我使用了一个元组,但是如果你有一个更长的链,传递一个List[ActorRef]
. 继续前进时,您会在发送者参考之前添加。当返回时,您回复列表头部并将列表尾部传递给回复。
编辑:考虑到维克多的评论。