我正在使用Play Framework控制器公开的WebSocket端点。然而,我的客户端将发送一个大字节数组,我对如何在我的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)
}
}
正如在上面的代码中可以看到的那样,我是如何将Byte数组作为一个请求处理并将响应作为String发送回来的?我的困惑在于Iteratee.foreach电话。这个foreach是字节数组上的foreach还是我从客户端作为字节数组发送的请求的全部内容?这很令人困惑!
有什么建议吗?
答案 0 :(得分:0)
嗯......这取决于。您的客户端是立即发送所有二进制文件,还是(明确地)按块发送块?
- >如果它是一次性的,那么一切都将在第一个块中(因此为什么是一个websocket?为什么一个Iteratee?使用BodyParser的动作可能会更有效率。)
- >如果它是块的块,你必须保留你收到的每个块,并在关闭时连接它们(关闭时,除非你有另一种方式让客户说:“嘿,我已经完成了!”)。