2014-02-25 268 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