0

我是 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 程序,以便它向远程参与者发送消息以执行计算。如何确保远程参与者仍然存在并已注册并且进程正在运行?

4

1 回答 1

0

不要在您的消息中包含演员参考。接收模式应该是:

receive {
  case (index :Int, length :Int) => 
    { // Do some stuff
    }
}

并且消息应该发送为myRemoteActor ! (3,2)

在接收者中,您可以只写sender来指代原始消息发送者。还有其他有用的功能,例如reply(msg)- 回复原始发件人msg

于 2012-12-27T19:06:57.650 回答