如何终止Scala Remote Actor客户端?
发布时间:2020-12-16 10:01:28 所属栏目:安全 来源:网络整理
导读:我正在和远程演员一起玩,但我遇到了一些困难. 考虑这个服务器: object Server { def main(args: Array[String]) { val server = new Server server.start }}class Server extends Actor { RemoteActor.alive(12345) RemoteActor.register('server,this) def
我正在和远程演员一起玩,但我遇到了一些困难.
考虑这个服务器: object Server { def main(args: Array[String]) { val server = new Server server.start } } class Server extends Actor { RemoteActor.alive(12345) RemoteActor.register('server,this) def act() { while(true) { receive { case x => println(x) } } } } 我写了一个简单的客户端: object Client { def main(args: Array[String]) { val server = RemoteActor.select(Node("localhost",12345),'server) server ! "Hey!" } } 正如所料,服务器打印“嘿!”. 但是,出乎意料的是,客户端应用程序永远不会终止! 看起来很多线程已在客户端应用程序上启动,但它们在我的主函数完成后继续运行! 我该怎么做才能终止客户端应用程序?还有更多:如果我希望我的客户能够启动和停止连接怎么办?我怎样才能做到这一点? 一些额外的信息(基于回复):我正在使用scala 2.8.0.final,我在这里谈论的是一个独立的服务器和一个独立的客户端.它们应该像$scala Server和$scala Client一样启动.我想要发生的是应用程序“客户端”应该完成,但它永远不会发生. 谢谢! 解决方法
不要从演员外部向其他演员发送消息.虽然Scala很乐意接受它,但正如你所看到的那样
has consequences.这是一个有效的等效代码:
import scala.actors.remote._ object Act extends scala.actors.Actor { def act = { val server = RemoteActor.select(Node("localhost",'server) server ! "Hey!" } } object Client { def main(args: Array[String]) { Act.start() } } 或者,更简单地说, import scala.actors.Actor.actor import scala.actors.remote._ object Client { def main(args: Array[String]) { actor { val server = RemoteActor.select(Node("localhost",'server) server ! "Hey!" } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |