gpt4 book ai didi

scala - 如何终止 Scala Remote Actor 客户端?

转载 作者:行者123 更新时间:2023-12-01 01:32:39 26 4
gpt4 key购买 nike

我正在与 Remote Actors 一起玩,但我遇到了一些困难。

考虑这个服务器:

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!"
}
}

正如预期的那样,服务器打印“嘿!”。

然而,出乎意料的是,客户端应用程序永远不会终止!

看起来客户端应用程序上已经启动了很多线程,但是它们在我的 main 函数完成后继续运行!

我该怎么做才能终止客户端应用程序?还有更多:如果我希望我的客户端能够启动和停止连接怎么办?我怎样才能做到这一点?

一些附加信息(基于回复):我使用的是 scala 2.8.0.final,我在这里谈论的是一个独立的服务器和一个独立的客户端。它们应该像 $ scala Server 一样启动和 $ scala Client .我想要发生的是应用程序“客户端”应该完成,但它永远不会发生。

谢谢!

最佳答案

不要从 Actor 外部向其他 Actor 发送消息。虽然 Scala 很乐意接受它,但它has consequences如你所见。这是一个有效的等效代码:

import scala.actors.remote._

object Act extends scala.actors.Actor {
def act = {
val server = RemoteActor.select(Node("localhost", 12345), '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", 12345), 'server)
server ! "Hey!"
}
}
}

关于scala - 如何终止 Scala Remote Actor 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com