У меня неожиданное поведение при использовании удаленных участников. У меня есть сервер и «клиент». Клиент отправляет сообщение субъекту сервера, и сервер отвечает. Когда я использую '?' оператор все работает как положено. Я получаю ответ от сервера.
Сервер:
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"
}
Что мне не хватает? Это ожидаемое поведение Akka? И как заставить его отправить ответ клиенту?
Спасибо за любой вклад.