Play Framework Websocket Async
-
21-12-2019 - |
Pregunta
Estoy usando un punto final de WebSocket expuesto por mi controlador Marco de juego.Sin embargo, mi cliente enviará una gran matriz de bytes y estoy un poco confundido sobre cómo manejar esto en mi ITERATEE.Aquí está lo que tengo:
DEF MYWSENDPOINT (F: STRING=> STRING)= WebSocket.Async [Array [Byte]] { SOLICITUD=>
Akka.future {
val (out, chan) = Concurrent.broadcast[Array[Byte]]
val in: Iteratee[Array[Byte], Unit] = Iteratee.foreach[Array[Byte]] {
// How do I get the entire file?
}
(null, null)
}
}
Como se puede ver en el código anterior, estoy atascado en la línea sobre cómo manejar la matriz de bytes como una solicitud y enviar la respuesta hacia atrás como una cadena?Mi confusión está en el ITERATEE.Foreach Call.¿Es este foreach un foreach en la matriz de bytes o en todo el contenido de la solicitud que envío como una matriz de bytes de mi cliente?¡Es confuso!
¿Alguna sugerencia?
Solución
bien ... depende.¿Está su cliente enviando todos los binarios a la vez, o es (explícitamente) trozos por chunk?
-> Si todo está a la vez, entonces todo estará en el primer trozo (por lo tanto, ¿por qué un WebSocket? ¿Por qué un itinerado? Las acciones con Bodyparser probablemente serán más eficientes para eso).
-> Si es fragmento por pieza, tiene que mantener todos los trozos que reciba, y concatenarlos en cierre (de cerca, a menos que tenga otra forma para que el cliente diga: "¡Oye, he terminado!"./ p>