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

Akka 仅通过回复回复远程客户端?,akka,actor,Akka,Actor,根据akka,你可以使用self.channel回复!消息以便代码在本地工作。我想对远程演员也这样做 我有: class ServerActor extends Actor { def receive = { case "Hello" => self.channel ! "World" } } 及 只要ServerActor接收到“Hello”并向ClientActor发送一条“World”消息,这种方法就可以工作。不幸的是,似乎接收消息的ClientActo

根据akka,你可以使用
self.channel回复!消息
以便代码在本地工作。我想对远程演员也这样做

我有:

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

只要
ServerActor
接收到“Hello”并向
ClientActor
发送一条“World”消息,这种方法就可以工作。不幸的是,似乎接收消息的
ClientActor
是在服务器VM中创建的,而不是实际发送消息的(在客户端VM中)

有没有办法让这一切顺利进行

PS:当我做一个
自我回复“世界”和
遥控时,它会工作吗?“您好”
,但是,我宁愿发送消息也不愿回复

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

我认为这是最重要的。当您希望从服务器接收消息时,还需要在客户端上启动服务器实例


例外情况是,当您使用问号运算符显式请求结果时

如果你把你使用的版本包括进来,肯定会对我有帮助。你已经在客户端和服务器上启动远程处理了吗?@VictorKlang:当然,这是akka-1.2。你说的“两者都远程处理”是什么意思?我只在服务器上执行
Actor.remote.start(…)
注册。客户端只调用(…)
Actor.remote.Actor。您还需要在客户端上启动远程处理。@ViktorKlang:谢谢。现在我大部分时间都能得到回复。有时(从多个客户端调用了1000次之后),serverVM开始在
createClientManagedActor
中抛出
ClassNotFoundException
s。。。(这是因为我正在为客户机和服务器使用独立的代码基[和类路径],所以服务器无法找到客户机类)。。。我猜这意味着服务器正在尝试(重新?)启动客户机VM上的客户机参与者。我建议在远程处理中关闭压缩,因为我们已经遇到了一些问题。另外,从性能的角度来看,增加客户端的读取超时也是很有趣的。默认情况下,这些建议都将在1.3中实现
class ClientActor extends Actor { 
   val remote = ...

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