使用远程actor时出现意外行为。我有一个服务器和一个'客户'。客户端向服务器actor发送消息,服务器回复。当我使用'?'操作员一切按预期工作。我从服务器上得到答案。
服务器:
class HelloWorldActor extends Actor {
def receive = {
case msg => self reply (msg + " World")
}
}
object Server extends App{
Actor.remote.start("localhost",2552);
Actor.remote.register("hello-service",Actor.actorOf[HelloWorldActor])
}
客户:
object Client extends App {
// client code
val actor = remote.actorFor(
"hello-service", "localhost", 2552)
val result = (actor ? "Hello").as[String]
println(result)
}
现在我更改了代码,以便客户端成为演员并且只对答案做出反应。但是,不会将回复发送回客户端。而是在服务器上创建一个'ClientActor'实例并在那里发送回复?
修改后的客户端:
class ClientActor extends Actor {
def receive = {
case "Ask" =>{
val actor = remote.actorFor(
"hello-service", "localhost", 2552)
actor ! "Hello"
}
case response:String => println(response) // This executed on the server! That's not what I expect?
}
}
object Client extends App {
// client code
val client = actorOf[ClientActor].start();
client ! "Ask"
}
我错过了什么?那是阿卡的预期行为吗?我怎么能强迫它把答案发回给客户?
感谢您的任何意见。
答案 0 :(得分:5)
您尚未在客户端上启动远程处理。