1

scala を使い始めて言語がとても気に入りましたが、アクターの仕組みを理解するのに苦労しているようです。以前は NIO を使用して多くのリモート作業を行っていましたが、今は scala のリモート アクターを試してみたいと思っています。

非常に単純なサーバーとクライアントを作成しようとしています (以下のコードを参照)。

  1. サーバーが起動しました
  2. リモート アクター プロキシが作成されます (次の例に従います: http://www.scala-lang.org/docu/files/actors-api/actors_api_guide_6.html )
  3. プロキシ経由でサーバーにメッセージを送信すると、それが通過します
  4. アプリケーションをシャットダウンしたい..... でもどうやって!? :)。それは永遠に続く

コード:

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回目の検索で答えが見つかりました: アクター以外からアクターにメッセージを送信するのは悪い習慣ですか?

4

0 に答える 0