2012-09-10 45 views
0

我是新来的scala,并试图使用Actor模型。 我一直在用同一台机器上的演员工作。 现在,我想使用远程演员来更进一步。 由于我只有一个盒子一起玩,我打算启动一个进程阶将作为远程演员斯卡拉在同一台机器上的远程演员

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 
    } 

} 

问题是,当我运行remote.scala使用eclipse(通过安装Eclipse的插件阶)我得到ŧ他

你好

开始远程演员

消息在Eclipse控制台打印。 但是,当我安装scala后从Windows命令行运行相同的程序。

C:\ Program Files文件(x86)的\斯卡拉\ BIN>斯卡拉remote.scala

则消息没有得到打印。但是,如果我改变remote.scala文件 只包括世界你好消息,(即remote.scala样子)

object hello { 
    def main(args: Array[String]): Unit = { 
    println("Hello") 
    } 
} 

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

我想要的是开始这个​​远程actor被注册并且进程仍然活着的scala进程。然后,我想从另一个命令提示符启动main.scala程序,以便它将消息发送给远程参与者以执行计算。 如何确保远程角色仍然活着并注册并且进程正在运行?

回答

0

不要在消息中包含actor参考。接收模式应该是:

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

和消息应myRemoteActor ! (3,2)

发送在接收器,你可以只写sender指原始发件人。还有其他有用的功能,例如reply(msg) - 回复原始发件人msg