私は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 プログラムを起動して、リモート アクターにメッセージを送信して計算を実行させたいと考えています。リモート アクターがまだ生きていて登録されていて、プロセスが実行中であることを確認するにはどうすればよいですか?