根据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上):由于“原始客户端”不再存在(但往返“仍在进行中” )奇怪的是,它们在客户端和服务器上都重新启动了。