我正在编写可能需要很长时间才能产生结果的 HTTP Web 服务。我使用嵌入式 Jetty 8.1.5 和 JAX-RS (Apache CXF)
我决定采用某种控制协议:当新请求到来时,我在一个单独的线程中开始一个长时间运行的作业,并定期以当前状态写入 HttpOutputStream 行(“CONTROL_MESSAGE:42% 完成”)
问题是 Jetty 在这里使用块编码,所以我的状态消息被缓冲并且没有用,因为它们都可以缓冲在一个块中,为客户端提供没有进展。
我不能使用 Content-Length 属性,因为我不知道最终结果的长度。HttpOutputStream.flush() 不起作用,因为 Jetty 使用内部缓冲区。
正如我所看到的,我需要一种方法来告诉 Jetty“请完成当前块并刷新它”,但不知道如何。