Scala远程演员在同一台机器上

时间:2012-09-10 22:00:36

标签: scala actor remote-actors

我是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插件)​​我得到了

您好

启动远程演员

在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")
  }
}

然后在Windows命令提示符下打印Hello消息。 为什么Windows命令提示不会在原始remote.scala?

的情况下打印消息

我想要的是启动此scala进程,其中远程actor已注册且进程仍处于活动状态。然后我想从另一个命令提示符启动main.scala程序,以便它向远程actor发送消息以执行计算。 如何确保远程actor仍处于活动状态并已注册并且进程正在运行?

1 个答案:

答案 0 :(得分:0)

不要在邮件中包含actor引用。接收模式应为:

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

该邮件应以myRemoteActor ! (3,2)

的形式发送

在接收器中,您只需编写sender即可引用原始邮件发件人。还有其他有用的功能,例如reply(msg) - 使用msg

回复原始发件人