2

我有一个中间远程参与者(B),它应该从 A 和 C 来回转发消息(如 A <-> B <-> C )。在 B 的代码中,我有类似的东西

   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)对于这种情况还有其他建议吗?

谢谢你们!

4

1 回答 1

0

对于标准Actor 模型的问题,必须以原子方式处理消息(即,当您处理另一个消息时,您无法接收和处理消息——这正是您在这里想要做的)

但是,Scala Actors 具有宽松的语义,这可能允许这样做。

对于问题1,您应该清楚react 和receive 之间的区别。无论如何,你可以很容易地使用反应(这里使用http://www.scala-lang.org/docu/files/actors-api/actors_api_guide.html

或者,您不能使用嵌套。在你的actor发送请求后,它的状态应该改变,以便下一个循环周期它会寻找回复。

您可能还想升级到集成了 Akka 演员的 Scala 2.10;该模型更清晰,更易于使用。

于 2013-04-09T17:44:50.647 回答