2011年8月16日 星期二

程式研究:akka的remote actor

akka的remote actor 是個神奇的東西,自動幫你處理了傳輸格式,你只要關心scala當中跟actor互傳的信息就好了。不過要讓akka 首頁上那段非常簡短的程式碼跑起來,需要不少準備。

首先是sbt,這是scala用的build tool,設定檔完全用scala語法表達,簡單方便。
執行sbt只需要一個jar檔和一個script,windows是bat檔,linux是shell script,設好了之後任意目錄下
執行sbt,回答問題之後就會自動產生目錄架構,之後就可以開始寫設定檔和程式了。
設定檔都在project目錄下,源代碼在src目錄下
project/build 之下,建立一個Project.scala,內容如下:
import sbt._
class ChatProject(info: ProjectInfo) extends DefaultProject(info) with AkkaProject {
val akkaRepo = "Akka Repo" at "http://akka.io/repository"
val akkaSTM = akkaModule("stm")
val akkaRemote = akkaModule("remote")
}


project/plugins 之下,建立一個Plugins.scala,內容如下
import sbt._
class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
val akkaRepo = "Akka Repo" at "http://akka.io/repository"
val akkaPlugin = "se.scalablesolutions.akka" % "akka-sbt-plugin" % "1.1.3"
}


之後在sbt下,執行reload和update,就會按照上述的設定抓好必要的檔案並決定從屬關係
之後執行console,可以在此環境下直接執行scala的類似直譯器。

打開第二個command prompt視窗,在工作目錄下再運行一個sbt,此視窗當作client用,第一個視窗當作server,兩個視窗都執行console
server視窗輸入
import akka.actor.Actor
import Actor._
class HelloActor extends Actor {
def receive = {
case "Hello" => self.reply("world")
}
}
remote.start("localhost", 9999)
remote.register("hello-service",actorOf[HelloActor])


client視窗輸入
import akka.actor.Actor
import Actor._
val actor = remote.actorFor("hello-service", "localhost", 9999)
val result = actor !! "Hello"


這樣就收到了server傳來的訊息了。把server當成一個actor用 akka 1.1.3的文件

沒有留言: