我正在写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