我是 scala 的新手,正在尝试使用 Actor 模型。我已经在同一台机器上使用演员。现在,我想使用远程演员更进一步。由于我只有一个盒子可以玩,我计划启动一个 scala 进程,它将充当远程演员
remote.scala 看起来像
import scala.actors._
import scala.actors.remote._
import scala.actors.remote.RemoteActor._
import Actor._
import scala.math._
class remoteActor extends Actor{
def act(){
alive(9010)
register('myActor, self)
while (true)
{
println("Started Remote Actor")
receive {
case (caller :Actor, index :Int, length :Int) =>
{ // Do some stuff
}
}
}
}
}
object hello {
def main(args: Array[String]): Unit = {
println("Hello")
val act = new remoteActor
act.start
}
}
将使用这个远程actor的主程序
演员.scala
import scala.actors._
import scala.actors.remote._
import scala.actors.remote.RemoteActor._
import Actor._
class masterActor extends Actor{
def act()
{
val myRemoteActor = select(Node("localhost", 9010), 'myActor)
myRemoteActor ! (self,3,2)
}
}
object hello {
def main(args: Array[String]): Unit = {
val sample = new masterActor
sample.start
}
}
问题是当我使用 eclipse 运行 remote.scala 时(通过为 eclipse 安装 scala 插件)我得到了
你好
启动远程 Actor
在 Eclipse 控制台中打印的消息。但是当我在安装 scala 后从 Windows 命令行运行相同的程序时。
C:\Program Files (x86)\scala\bin>scala remote.scala
那么消息不会被打印出来。但是,如果我将 remote.scala 文件更改为仅包含 hello world 消息,(即 remote.scala 看起来像)
object hello {
def main(args: Array[String]): Unit = {
println("Hello")
}
}
然后 Hello 消息会打印在 Windows 命令提示符上。为什么 Windows 命令提示符在原始 remote.scala 的情况下不打印消息?
我想要的是启动这个 scala 进程,在该进程中注册了远程参与者并且该进程仍然存在。然后我想从另一个命令提示符启动 main.scala 程序,以便它向远程参与者发送消息以执行计算。如何确保远程参与者仍然存在并已注册并且进程正在运行?