2011-06-30 2 views
3
object RemoteEchoServer extends App { 
    remote.start("localhost", 1111) 
    remote.register("hello-service", actorOf[HelloWorldActor]) 
} 

object RemoteEchoClient extends App { 
    val actor = remote.actorFor("hello-service", "localhost", 1111) 
    val reply = actor !! "Hello" 
    println(reply) 
    actor ! "Stop" 
    actor ! PoisonPill 
} 

/** 
* a remote actor servers for message "Hello" and response with a message "World" 
* it is silly 
*/ 
class HelloWorldActor extends Actor { 
    def receive = { 
    case "Hello" => 
     println("receiving a Hello message,and a World message will rply") 
     self.reply("World") 
    case "Stop" => 
     println("stopping...") 
     remote.shutdown() 
    } 
} 

を殺すことはありませんが、遠隔自体を終了することはありません。 remote.shutdown()を呼び出すことによって、オブジェクトRemoteEchoServerのリモートアクタを強制終了する必要があります。 「Stop」メッセージを受け取ってリモートアクタをシャットダウンする方法は?remote.shutdown()は、クライアントが<strong>PoisonPill</strong>だけでなく、「停止」信号を送るアッカリモート俳優自体

私は(出口を知っている)は、おそらく直接サーバーアプリを終了し、まだ存在する場合、プロセスへのニーズを要求するものだろう。

キーポイントはremote.shutdown()は決してシャットダウン、リモート・サービス(サーバアプリ)を呼び出しているので、私は

+0

?!:だからPoisonPillを忘れて、ただStopメッセージを使用 – fresskoma

+1

なぜ、1つのアクタを閉じるだけで、リモーティングサービス全体をシャットダウンするのですか? –

+1

あなたはまた –

答えて

4

俳優がで自分自身を殺すことができる俳優のサーバアプリを停止したい場合、私は何をすべきかself.stopを呼び出します。これが閉じるように投票した理由私は思ったんだけど

case "Stop" => { 
    println("stopping...") 
    self.stop 
    remote.shutdown() 
} 
+4

ためのデリゲート賢明な選択肢は「postStop DEF」オーバーライドして、そこにリモーティングを切ってから、あなたにある場合を例に触発されました独自の「停止」メッセージを作成する代わりに、PoisonPillメッセージを再利用することができます。 –

+0

はい。それは良いです。 – paradigmatic

+0

私はこの方法を試してみましたが、サーバアプリは、プログラム全体の終了後に終了したことがない、リモート接続 – jilen

関連する問題