До того, как я перешел на Play 2.5.x, я часто использовал WebSocket.acceptWithActor
. Теперь я не могу заставить свои веб-сокеты оставаться открытыми при использовании разных входных и выходных данных, в моем случае вход - String, вывод - JsValue.
Мой приемник перед воспроизведением 2.5.x:
object Application extends Controller {
def myWebSocket = WebSocket.acceptWithActor[String, JsValue] { request =>
out => MyActor.props(out)
}
Мой приемник в Play 2.5.x:
@Singleton
class Application @Inject() (implicit system: ActorSystem, materializer: Materializer) extends Controller {
implicit val messageFlowTransformer =
MessageFlowTransformer.jsonMessageFlowTransformer[String, JsValue]
def myWebSocket = WebSocket.accept[String, JsValue] { request =>
ActorFlow.actorRef(out => MyActor.props(out))
}
}
В моем акторе preStart
вызывается сразу после postStop
, поэтому это явно неверно, но я не могу найти какое-либо решение в документации (https://www.playframework.com/documentation/2.5.x/ScalaWebSockets).
Если я использую WebSocket.accept[String, String]
, сокет остается открытым.
Что я делаю неправильно?