开始使用 scala 并且非常喜欢这种语言,但我似乎很难理解演员是如何工作的。我以前使用 NIO 做了很多远程工作,但现在我想尝试 scala 的远程演员。
我正在尝试创建一个非常简单的服务器和客户端(参见下面的代码)。
- 服务器已启动
- 制作了一个远程演员代理(按照这个例子:http ://www.scala-lang.org/docu/files/actors-api/actors_api_guide_6.html )
- 我通过代理向服务器发送一条消息,它通过了
- 我想关闭我的应用程序......但是怎么做!?:)。它永远持续下去
代码:
package testactors
import scala.collection.mutable.ArrayBuffer
import scala.actors._
import scala.actors.Actor._
import scala.actors.remote._
import scala.actors.remote.RemoteActor._
class Server extends Actor {
start
@volatile private var toLive = true
def act() {
alive(9000)
register('server, self)
while (toLive) {
receiveWithin(100) {
case TIMEOUT =>
case e => println(e)
}
}
println("Server died")
}
def killActor() {
toLive = false
}
}
object Main {
def main(args: Array[String]): Unit = {
val remoteSrc = new Server
println("Connecting to remote actor")
var localSrc = select(Node("localhost", 9000), 'server)
localSrc ! "hello"
Thread.sleep(1000)
println("Killing remote actor")
remoteSrc.killActor
}
}
输出是:
Connecting to remote actor
hello
Killing remote actor
Server died
但它会一直持续下去。。
更新
对不起!重复,第三次搜索找到答案: 向演员发送来自非演员的消息是不好的做法吗?