Функция Act() акторов Scala Akka

Все учебники, которые я читал, работают так:

class HelloWorldActor extends Actor {
  def receive = {
    case "Hello" => self.reply("World")
  }
}

val myActor = system.actorOf(Props[MyActor], name = "myactor")

Мне интересно, поддерживает ли AKKA функцию act() внутри класса Actor следующим образом:

class HelloWorldActor extends Actor {
  def act() = {

  }
}

И тогда вы можете позвонить:

val myActor = new HelloWorldActor
myActor.start()

Я хочу сделать это, потому что мой актер не будет получать никаких сообщений. Он просто работает сам по себе. Итак, могу ли я использовать функцию act() внутри моего актера AKKA?


person user1491739    schedule 12.07.2012    source источник
comment
На что тогда реагирует ваш актор, если он не получает никаких сообщений? Может быть, все, что вам нужно, это Будущее?   -  person Debilski    schedule 13.07.2012


Ответы (1)


В Akka ваш актор должен запускаться автоматически после создания с помощью системы. Но звучит так, как будто вы хотите использовать актор как простой поток, который мы все знаем из Java. Я бы сказал, что это неправильный путь с идиоматической точки зрения. Конечно, вы можете просто добавить стартовое сообщение к вашему актору, отправить его актору после создания и выполнить обработку в обработчике. Но, возможно, вам следует подумать об использовании простого потока или Future вместо актора, если вы не хотите реагировать на какое-либо сообщение?

person Sven Viehmeier    schedule 12.07.2012
comment
Как использовать простую нить или будущее? Являются ли фьючерсы функциями? Я не понимаю, как использовать будущее после прочтения учебника. - person user1491739; 13.07.2012
comment
Для простого потока просто расширьте класс Java Thread и реализуйте метод run(). Есть много примеров. На будущее @Debilski уже связал вас со статьей, объясняющей его использование. Обратите внимание на раздел «Использовать напрямую». Если оба решения не подходят для вашей проблемы, вы должны описать ее более подробно. - person Sven Viehmeier; 13.07.2012