2014-02-24 93 views

回答

2

我不使用類型化的演員,但是我會根據文檔和一些猜測工作,無論如何回答這個問題。我不相信類型演員和ActorSelection直接在一起工作。如果你考慮一個ActorSelection,它實際上代表了0到很多實際的ActorRefs,它們與actorSelection調用中使用的任何查詢匹配。如果您想將相同的消息廣播給一組演員,這種選擇適用於無類型的演員。在這之前坐下一個類型化的代理似乎沒什麼意義,因爲我不能想到大量的用例,希望縮小打字範圍並將其廣播到一組可能的目的地並可能接收到響應(即ask)。

現在,如果你有一個ActorSelection,並且要查詢該選擇爲其下一個裁判(通過使用IdentifyresolveOne),你回來了ActorRef,那麼你可以捕捉在前面一個類型的演員代理它像這樣:

val typedActor = 
    TypedActor(system).typedActorOf(TypedProps[MyTypedActor],myLookedUpRef) 

這種技術基本上需要擡頭非類型化的演員,它縮小成一個TypedActor,你現在可以通過TypedActor s接口通信。

你可以閱讀更多關於TypedActor s here和更多關於解析ActorSelection s here

+0

感謝您的詳細回覆。我沒有意識到,當你將'ActorRef'傳遞給'typedActorOf'時,它將它縮小爲所需的類型。唯一的問題是,要獲得'ActorRef',你必須在選擇時執行'resolveOne()'並且是一個異步操作,它需要一些代碼。我找到了以下票據,並鏈接到有關Google網上論壇的討論:[link](https://www.assembla.com/spaces/akka/tickets/3716?comment=419485183)。比較使用'TypedActor'所需的代碼量與簡單的'actorSelect! msg'讓你思考如果使用類型演員的話。 – andruha

+0

是的,在使用TypedActors之前,應該考慮三次。 –