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