Play Framework WebSocket Async

时间:2014-02-25 10:42:58

标签: scala websocket playframework-2.0 iterate

我正在使用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还是我从客户端作为字节数组发送的请求的全部内容?这很令人困惑!

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

嗯......这取决于。您的客户端是立即发送所有二进制文件,还是(明确地)按块发送块?

- >如果它是一次性的,那么一切都将在第一个块中(因此为什么是一个websocket?为什么一个Iteratee?使用BodyParser的动作可能会更有效率。)

- >如果它是块的块,你必须保留你收到的每个块,并在关闭时连接它们(关闭时,除非你有另一种方式让客户说:“嘿,我已经完成了!”)。