scala playframework akka

scala - ¿Cuál es el equivalente de Play 2.5.x de acceptWithActor[String, JsValue]?



playframework akka (2)

He encontrado un workarround

Mi controlador:

ActorFlow.actorRef[String, JsValue](out => MyActor.props( out, ... ) ).map(_.toString)

Con esto no debe definir un transformador de mensajes personalizado y, a nivel de actor, todavía puede recibir cadenas y devolver JsValues.

Antes de migrar a Play 2.5.x utilicé WebSocket.acceptWithActor frecuencia. Ahora no puedo hacer que mis sockets web permanezcan abiertos cuando se utilizan diferentes entradas y salidas, en mi caso, la entrada es String, la salida es JsValue.

Mi receptor antes de Play 2.5.x:

object Application extends Controller { def myWebSocket = WebSocket.acceptWithActor[String, JsValue] { request => out => MyActor.props(out) }

Mi receptor en 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)) } }

En mi actor se llama a preStart inmediatamente seguido de postStop , por lo que obviamente es incorrecto, pero no puedo encontrar ninguna solución en la documentación ( https://www.playframework.com/documentation/2.5.x/ScalaWebSockets ). Si uso WebSocket.accept[String, String] el socket permanece abierto.

¿Qué estoy haciendo mal?


Intente enviar el mensaje de entrada entre comillas en lugar de una cadena simple. En mi caso (con el mismo código) trabajé utilizando la herramienta websocket.org/echo