Предположим, у меня есть контроллер, который обрабатывает команды, которые я получаю от websocket.Подход Akka-http для обработки команд websocket
class WebSocketController(implicit M: Materializer)
extends Controller
with CirceSupport {
override def route: Route = path("ws") {
handleWebSocketMessages(wsFlow)
}
def wsFlow: Flow[Message, Message, Any] =
Flow[Message].mapConcat {
case tm: TextMessage =>
decode[Command](tm.getStrictText) match {
// todo pass this command to some actor or service
// and get response and reply back.
case Right(AuthorizeUser(login, password)) =>
TextMessage(s"Authorized: $login, $password") :: Nil
case _ =>
Nil
}
case bm: BinaryMessage =>
bm.dataStream.runWith(Sink.ignore)
Nil
}
}
Таким образом, я получаю команду, десериализациям это и следующий шаг, который я хочу сделать, это передать его в какую-то службу или актер, который вернет мне Future[SomeReply]
.
Вопрос: Каков основной подход к обработке такого потока потоками akka?