0

私はscalaが初めてで、Actorモデルを使用しようとしています。同じマシンでアクターを使用して、自分のやり方で作業しました。ここで、リモート アクターを使用してさらに一歩進めたいと思います。遊ぶボックスが 1 つしかないので、リモート アクターとして機能する 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
   }
}

このリモート アクターを使用するメイン プログラム

アクター.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")
  }
}

次に、Hello メッセージが Windows コマンド プロンプトに出力されます。元の remote.scala の場合、Windows コマンド プロンプトがメッセージを出力しないのはなぜですか?

私が望むのは、リモート アクターが登録され、プロセスがまだ生きているこの scala プロセスを開始することです。次に、別のコマンド プロンプトから main.scala プログラムを起動して、リモート アクターにメッセージを送信して計算を実行させたいと考えています。リモート アクターがまだ生きていて登録されていて、プロセスが実行中であることを確認するにはどうすればよいですか?

4

1 に答える 1

0

メッセージに俳優の参照を含めないでください。受信パターンは次のとおりです。

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

そして、メッセージは次のように送信する必要がありますmyRemoteActor ! (3,2)

sender受信者では、元のメッセージ送信者を参照するように書くことができます。他にも便利な機能があります。たとえばreply(msg)、元の送信者に次のように返信しますmsg

于 2012-12-27T19:06:57.650 に答える