2012-09-10 2 views
0

저는 스칼라를 처음 사용하고 액터 모델을 사용하려고합니다. 동일한 컴퓨터에서 배우를 사용하여 작업했습니다. 이제 원격 액터를 사용하여 한 단계 더 나아가겠습니다. 내가 플레이하는 단 하나의 상자를 가지고 , 나는동일한 컴퓨터에서 스칼라 원격 액터

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

메인 프로그램과 같은 원격 배우 역할을합니다 스칼라 프로세스를 시작할 계획입니다 내가 remote.scala 이클립스를 사용하여 실행할 때 배우

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 
    } 

} 

문제는 내가 t 수 (일식에 대한 스칼라 플러그인을 설치하여)입니다 이클립스 콘솔에 인쇄 그는

안녕하세요

시작 원격 배우

메시지. 그러나 스칼라 설치 후 Windows 명령 줄에서 동일한 프로그램을 실행할 때.

C : \의 Program Files (x86) \의 스칼라 \ 빈> 스칼라 remote.scala

다음 메시지는 인쇄되지 않습니다. 내가 에 remote.scala 파일을 변경하는 경우에는 바로 안녕하세요 세계 메시지 (즉, remote.scala 모양)

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

는 다음 Hello 메시지는 Windows 명령 프롬프트에 인쇄됩니다를 포함한다. 원본 remote.scala의 경우 Windows 명령 프롬프트에서 메시지를 인쇄하지 않는 이유는 무엇입니까?

원격 액터가 등록되어 있고 프로세스가 아직 살아있는이 스칼라 프로세스를 시작하는 것이 좋습니다. 그런 다음 다른 명령 프롬프트에서 main.scala 프로그램을 시작하여 계산을 수행하기 위해 원격 액터에게 메시지를 보냅니다. 원격 액터가 아직 살아 있고 등록되어 있고 프로세스가 실행 중인지 어떻게 확인할 수 있습니까?

답변

0

메시지에 액터 참조를 포함하지 마십시오. 수신 패턴은 다음과 같아야합니다

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

그리고 그 메시지는 바로 원래의 메시지를 보낸 사람을 참조 sender를 작성할 수 수신기에서 myRemoteActor ! (3,2)

로 전송해야한다. 다른 유용한 기능이 있습니다. reply(msg) - 원래 발신자에게 msg

으로 답장합니다.