Play Framework WebSocket Async
Я использую конечную точку WebSocket, предоставляемую моим контроллером Play Framework. Мой клиент, однако, отправит большой байтовый массив, и я немного запутался в том, как справиться с этим в моем Iteratee. Вот что у меня есть:
def myWSEndPoint (f: String => String) = WebSocket.async [Array [Byte]] {request =>
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)
}
}
Как видно из приведенного выше кода, я застрял в строке о том, как обрабатывать массив байтов как один запрос и отправлять ответ обратно в виде строки? Моя путаница связана с вызовом Iteratee.foreach. Является ли это foreach foreach для байтового массива или всего содержимого запроса, который я отправляю в виде байтового массива от моего клиента? Это сбивает с толку!
Какие-либо предложения?
1 ответ
Смотря как. Ваш клиент отправляет все двоичные файлы одновременно или это (явно) фрагмент за фрагментом?
-> Если это все сразу, то все будет в первом блоке (поэтому, почему веб-сокет? Почему Iteratee? Действия с BodyParser, вероятно, будут более эффективными для этого).
-> Если это кусок за куском, вы должны хранить все полученные куски и соединять их при закрытии (при закрытии, если у вас нет другого способа сказать клиенту: "Эй, я закончил!").