我是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仍处于活动状态并已注册并且进程正在运行?
答案 0 :(得分:0)
不要在邮件中包含actor引用。接收模式应为:
receive {
case (index :Int, length :Int) =>
{ // Do some stuff
}
}
该邮件应以myRemoteActor ! (3,2)
在接收器中,您只需编写sender
即可引用原始邮件发件人。还有其他有用的功能,例如reply(msg)
- 使用msg