Przed przeniesieniem do wersji 2.5.x często korzystałem z WebSocket.acceptWithActor
. Teraz nie mogę dostać moich gniazd sieciowych, aby pozostać otwarte przy użyciu różnych danych wejściowych i wyjściowych, w moim przypadku, wejście jest String, wyjście to JsValue.Co to jest odpowiednik w Play 2.5.x dla acceptWithActor [String, JsValue]?
Mój odbiornik przed play 2.5.x:
object Application extends Controller {
def myWebSocket = WebSocket.acceptWithActor[String, JsValue] { request =>
out => MyActor.props(out)
}
Mój odbiornik w grze 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))
}
}
W moim aktor preStart
jest wywoływana natychmiast następuje postStop
, więc jest to oczywiście nieprawidłowe , ale nie mogę znaleźć żadnego rozwiązania w dokumentacji (https://www.playframework.com/documentation/2.5.x/ScalaWebSockets). Jeśli użyję WebSocket.accept[String, String]
, gniazdo pozostanie otwarte.
Co robię źle?
Witam, znalazłeś rozwiązanie tego? – SergiGP
Niestety nie, poszedłem za pomocą 'WebSocket.accept [String, String]' –
spójrz na moją odpowiedź, jest brudna, ale może zadziała dla ciebie :) – SergiGP