Channel通过使用具体的Channel类创建。它同时扩展了InputChannel和OutputChannel。使Channel在多个Actor的作用域(Scope)中可见,或者在消息中发送该Channel,达到Channel的共享。例9-8是基于作用域共享的例子。
【例9-8】在子Actor中使用外部的共享Channel传递消息的示例。
执行结果如图9-9所示。
图9-9 两个Actor通过共享Channel完成信息交换
注意:子Actor对out(一个OutputChannel[String])具有唯一的访问权。而用于接收消息的Channel的引用则被隐藏了。然而,必须要注意的是,在子Actor向输出Channel发送消息之前,确保输出Channel被初始化到一个具体的Channel。通过Channel发送“hello world”消息,当使用channel.receive从Channel接收消息时,因为消息是String类型的,可以使用它提供的length成员。
另一种共享Channel的可行的方法是在消息中发送。如例9-9所示。(www.daowen.com)
【例9-9】在两个不同Actor中,通过发送Channel,达到共享Channel的目的的示例。
运行结果如图9-10所示。
图9-10 在不同Actor中,通过发送Channel达到共享目的
发送Channel来达到共享的方式,是向目标Actor发送消息,将回写的通道以消息的方式发送到目标Actor,目标Actor得到回写通道,通过Channel上的方法向通道中发送消息,而持有该Channel的Actor通过该Channel的receive或react方法,得到回写的消息。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。