scala を使い始めて言語がとても気に入りましたが、アクターの仕組みを理解するのに苦労しているようです。以前は NIO を使用して多くのリモート作業を行っていましたが、今は scala のリモート アクターを試してみたいと思っています。
非常に単純なサーバーとクライアントを作成しようとしています (以下のコードを参照)。
- サーバーが起動しました
- リモート アクター プロキシが作成されます (次の例に従います: http://www.scala-lang.org/docu/files/actors-api/actors_api_guide_6.html )
- プロキシ経由でサーバーにメッセージを送信すると、それが通過します
- アプリケーションをシャットダウンしたい..... でもどうやって!? :)。それは永遠に続く
コード:
package testactors
import scala.collection.mutable.ArrayBuffer
import scala.actors._
import scala.actors.Actor._
import scala.actors.remote._
import scala.actors.remote.RemoteActor._
class Server extends Actor {
start
@volatile private var toLive = true
def act() {
alive(9000)
register('server, self)
while (toLive) {
receiveWithin(100) {
case TIMEOUT =>
case e => println(e)
}
}
println("Server died")
}
def killActor() {
toLive = false
}
}
object Main {
def main(args: Array[String]): Unit = {
val remoteSrc = new Server
println("Connecting to remote actor")
var localSrc = select(Node("localhost", 9000), 'server)
localSrc ! "hello"
Thread.sleep(1000)
println("Killing remote actor")
remoteSrc.killActor
}
}
出力は次のとおりです。
Connecting to remote actor
hello
Killing remote actor
Server died
でも永遠に続くよ..
アップデート
ごめん!重複、3回目の検索で答えが見つかりました: アクター以外からアクターにメッセージを送信するのは悪い習慣ですか?