Отправка сообщения в Play Controller от дочерних актеров

Я не понимаю, как передать сообщение актору, у которого есть конструктор, принимающий в качестве аргументаactorRef.

Я пытаюсь реализовать простой сервер веб-сокетов с помощью Play Framework.

Я получаю клиентский запрос в контроллере, и я могу передать запрос родительскому актеру (который принимает actRef в качестве аргумента конструктора), который, в свою очередь, передает запрос дочернему актеру.

Как только дочерний актер обработал запрос, я не могу отправить ответ контроллеру.

@Singleton
class RequestController @Inject()(cc: ControllerComponents)(implicit system: ActorSystem, mat: Materializer) extends AbstractController(cc) {
    def ws = WebSocket.accept[String, String] {req =>
    ActorFlow.actorRef { out =>
      ParentActor.props(out)
    }
  }
}
=======
object ParentActor {
  def props(out: ActorRef) = Props(new ParentActor(out))
}

class ParentActor(out : ActorRef) extends Actor {
implicit val actorSystem = ActorSystem("ab")
    override def receive: Receive = {
         case msg: String => 
            val childActor: ActorRef = actorSystem.actorOf(Props[ChildActor])
            childActor ! msg
         case msg: Response => out ! msg
    }
}
==================
case class Response(name:String, msg:String)
class ChildActor extends Actor{
implicit val actorSystem = ActorSystem("cd")
    override def receive: Receive = {
        case msg : String => 
        // Below statement is not working. I tried with sender() instead of self
        // which is also not working
        val parentActor = actorSystem.actorOf(Props(new ParentActor(self))) 
        parentActor ! Response("ABC",msg) 
    }
}
Альтернативные WebSockets для netty/java: удвоение пропускной способности небольших сообщений
Альтернативные WebSockets для netty/java: удвоение пропускной способности небольших сообщений
Этот пост - краткая презентация netty-websocket-http1 - альтернативной netty/java реализации RFC6455 - протокола WebSocket.
Очень простая установка Websocket с помощью Deno без каких-либо пакетов
Очень простая установка Websocket с помощью Deno без каких-либо пакетов
Здесь мы рассмотрим, как можно использовать Websocket в Deno и развернуть его в Deno deploy. Мы будем слушать Websocket, а также отправлять сообщения.
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прямо сейчас вы создаете нового актера с линией

val parentActor = actorSystem.actorOf(Props(new ParentActor(self)))

Если вы уверены, что сообщение всегда исходит от соответствующего ParentActor, вам не нужно создавать нового актера, и вы должны иметь возможность отправить ему сообщение с помощью

sender() ! Response("ABC", message)

Спасибо. Позвольте мне попробовать ваше предложение и ответить

Fish 31.05.2019 13:10

Другие вопросы по теме