2014-02-25 266 views
0

我正在使用我的Play Framework控制器公开的WebSocket端点。然而,我的客户端会发送一个大的字节数组,我对如何在我的Iteratee中处理这个问题感到困惑。以下是我有:播放框架WebSocket异步

DEF myWSEndPoint(F:字符串=>字符串)= WebSocket.async [阵列[字节]] { 请求=>

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数组作为一个请求处理并将响应作为字符串发送回来方面行不通?我的困惑在于Iteratee.foreach电话。这是foreach foreach上的字节数组或从我的客户端发送的字节数组的请求的全部内容?这很混乱!

有什么建议吗?

回答

0

嗯......这要看。您的客户端是否一次发送所有二进制文件,或者是否明确地按块进行大块?如果它全部一次,那么一切都将在第一块(因此为什么是一个websocket?为什么一个Iteratee?与BodyParser的行动可能会更有效)。

- >如果它是块大块,你必须保持你收到的每个块,并紧密连接它们(最后,除非你有另一种方式让客户说:“嘿,我完成了!”)。

+0

对我而言,我已经有了另一个端点设置,它是我的播放控制器中的普通HTTP端点,我使用HTTP Post将字节数组发送到服务器。但唯一的区别是,对于WebSocket端点,我可以使用HTTP GET而不是POST。如果我使用GET,我不能在BodyParser中使用Actions。我考虑使用WebSocket的主要原因是使用GET请求而不是POST请求 – sparkr