理论教育 Scala语言开发实战:创建和共享channel

Scala语言开发实战:创建和共享channel

时间:2023-11-24 理论教育 版权反馈
【摘要】:Channel通过使用具体的Channel类创建。在子Actor中使用外部的共享Channel传递消息的示例。图9-9两个Actor通过共享Channel完成信息交换注意:子Actor对out具有唯一的访问权。而用于接收消息的Channel的引用则被隐藏了。然而,必须要注意的是,在子Actor向输出Channel发送消息之前,确保输出Channel被初始化到一个具体的Channel。通过Channel发送“hello world”消息,当使用channel.receive从Channel接收消息时,因为消息是String类型的,可以使用它提供的length成员。另一种共享Channel的可行的方法是在消息中发送。

Scala语言开发实战:创建和共享channel

Channel通过使用具体的Channel类创建。它同时扩展了InputChannel和OutputChannel。使Channel在多个Actor的作用域(Scope)中可见,或者在消息中发送该Channel,达到Channel的共享。例9-8是基于作用域共享的例子。

【例9-8】在子Actor中使用外部的共享Channel传递消息的示例。

978-7-111-54169-1-Chapter09-17.jpg

978-7-111-54169-1-Chapter09-18.jpg

执行结果如图9-9所示。

978-7-111-54169-1-Chapter09-19.jpg

图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的目的的示例。

978-7-111-54169-1-Chapter09-20.jpg

978-7-111-54169-1-Chapter09-21.jpg

运行结果如图9-10所示。

978-7-111-54169-1-Chapter09-22.jpg

图9-10 在不同Actor中,通过发送Channel达到共享目的

发送Channel来达到共享的方式,是向目标Actor发送消息,将回写的通道以消息的方式发送到目标Actor,目标Actor得到回写通道,通过Channel上的方法向通道中发送消息,而持有该Channel的Actor通过该Channel的receive或react方法,得到回写的消息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈