【问题标题】:Scala remote actors on same machine同一台机器上的 Scala 远程演员
【发布时间】:2012-09-03 19:32:09
【问题描述】:

我是 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的主程序

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

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

我想要的是启动这个 scala 进程,在该进程中注册了远程参与者并且该进程仍然存在。然后我想从另一个命令提示符启动 main.scala 程序,以便它向远程参与者发送消息以执行计算。 如何确保远程参与者仍然活着并已注册并且进程正在运行?

【问题讨论】:

    标签: scala actor remote-actors


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 2011-02-14
      • 2011-05-17
      • 2012-05-09
      • 2012-09-02
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多