我正在寫HTTP Web服務,可能需要相當長的時間來產生結果。我使用嵌入式Jetty 8.1.5和JAX-RS(Apache CXF)如何控制碼頭中的塊?
我決定採用某種控制協議:當新請求到達時,我在一個單獨的線程中啓動一個長時間運行的作業,並定期寫入具有當前狀態(「CONTROL_MESSAGE:42%完成」)的HttpOutputStream行
問題是Jetty在此使用塊編碼,所以我的狀態消息被緩衝並且無用,因爲它們都可以緩存在單個塊中,沒有一個客戶的進展。
我不能使用Content-Length屬性,因爲我不知道最終結果長度。由於Jetty使用內部緩衝區,HttpOutputStream.flush()不起作用。
正如我所看到的,我需要一種方式來告訴碼頭「請完成當前塊並沖洗它」,但不知道如何。
的確,問題實際上是Apache CXF在我們使用的版本中存在一個錯誤,它只是忽略了flush()調用。 – relgames 2013-05-18 16:29:25