2013-03-27 70 views
2

我有一個應該向前來回從A和C(如A < - >乙< - > C)的消息的中間遠程演員(B)。在B的代碼中,我有這樣的事情嵌套反應(或接收)Scala中

loop { 
     react { 
     case msg => val A = sender 
      //2) Should this be synchronous with !? 
      C ! msg 
      //1) What's better react or receive? 
      react { 
      case response => A ! response 
      } 
     } 
    } 

3個問題:

1)什麼是更好的內反應反應或接收(窩)?

2)鑑於回覆將被髮回,應該!被用來代替!

3)此場景的其他建議?

謝謝大家!

+2

您可以通過與中間演員消息時使用「pipeTo」,特別有用的管道消息。 – 2013-03-27 19:21:13

+1

我覺得pipeTo只在阿卡存在,上面的代碼是不推薦使用Scala的參與者模式。 – 2013-03-28 08:55:36

回答

0

對於所關注的標準 Actor模型,信息必須自動處理(即你不能接收和處理消息,當您正在處理另一個 - 而這正是你想在這裏做什麼)

然而,斯卡拉演員有一個輕鬆的語義,可能允許這樣做。

對於問題1,您應該清楚反應與接受之間的區別。無論如何,你可以很容易地使用反應(如這裏http://www.scala-lang.org/docu/files/actors-api/actors_api_guide.html使用)

或者,你不能使用嵌套。在你的actor發送請求之後,它的狀態應該改變,這樣下一個循環就會尋找答覆。

您可能還想升級到Scala 2.10,它集成了Akka的演員;該型號更清晰易用。