仅通过回复回复远程客户端?

时间:2011-11-03 10:48:08

标签: akka actor

根据akka actor documentation,可以使用self.channel ! Message进行回复,以便代码在本地运行。我想对远程演员做同样的事情。

我有:

class ServerActor extends Actor {
  def receive = {
    case "Hello" =>
      self.channel ! "World"
  }
}

class ClientActor extends Actor { 
   val remote = ...

   def receive = {
      case "Start" =>
           remote ! "Hello" 
      case "World" => 
           println("World received")
   }
}

只要ServerActor收到“Hello”并向ClientActor发送“世界”消息,就可以使用此功能。不幸的是,似乎接收消息的ClientActor是在服务器VM中创建的消息,而不是实际发送它的消息(在客户端VM中)。

有没有办法让这项工作?

PS:当我执行self reply "World"remote ? "Hello"时,它会起作用,但是,我宁愿发送消息而不是回复。

编辑:感谢大家。在两端开始远程操作是个问题。其他人发现这个问题要小心: 当使用让客户端以非阻塞方式接收响应时(如不使用remote ? request),在收到关闭消息时立即关闭它们将导致一些奇怪的行为(在我的评论中提到);可能是设计到期(对于akka的让它失败的容错?)。由于客户端没有等待响应,在收到关闭消息后立即关闭它们将导致以下情况(在akka-1.2上):由于“原始客户端”不再存在(但往返“仍在进行中” )奇怪的是,它们在客户端和服务器上都重新启动了。

1 个答案:

答案 0 :(得分:0)

我认为这是same problem I had。您需要在客户端启动服务器实例以及何时需要从服务器接收消息。

例外情况是当您明确要求带有问号运算符的结果时。