2013-08-03 49 views
1

問actorselection我想在遊戲中實現這種模式:阿卡從遊戲控制器

class MyController extends Controller { 
    def getStuff(actorPath: String) = { 
     implicit request => Async { 
      val myFutureStuff = system.actorSelection(actorPath) ? FindStuff() 

      // Handle the result 
     } 
    } 
} 

但很顯然,你不能「問」的ActorSelection,只有ActorRef。

所以你必須從ActorSelection中獲得一個ActorRef,這意味着向ActorSelection發送一個「Identify」消息並獲得響應。但是,我無法從控制器中找到一種簡單的方法,因爲演員無法將「識別」的響應發回給它。

從例子我已經看到人們通過控制器與演員通信,他們直接使用ActorRef。在我的應用程序中,我不想掛在這些ActorRefs上。相反,我將它們解僱並讓他們離開,直到我需要與他們溝通。當發生這種情況時,我希望能夠通過他們的路徑得到他們的處理,並詢問他們的一些信息。

在仍然使用演員後端/播放前端方法的同時,是否有更好的方式來做我想做的事?

非常感謝

回答

0

我不知道如果這是真的,你應該能夠使用要求圖案的ActorSelection。所以這應該在理想情況下工作,actorSelection的唯一問題是,因爲它只通過它的路徑查找actor,所以不能保證在後續調用中引用同一個actor。

但是,如果您希望在非演員實例中收到答覆,則可以使用未來方法之一。

implicit val timeout = Timeout(5 seconds) 
    val future = system.actorSelection(remotePath) ? Identify(remotePath) 
    val result = Await.result(future, timeout.duration) 
    val actorRef = result match { 
    case ActorIdentity(path, Some(actor)) => actor 
    } 
+0

當我嘗試在控制檯中得到: value?不是akka.actor.ActorSelecton的成員 – jb44

+0

您使用的是什麼akka版本? –

+0

當我嘗試使用時,我在播放中遇到相同的編譯錯誤。 – jb44