gpt4 book ai didi

java - 使用 Jersey 2.x 客户端,如何在服务器仍在写入其 OutputStream 时从 InputStream 读取数据?

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:05 27 4
gpt4 key购买 nike

我们最近从 Jersey 1.x 升级到 2.x,大部分迁移都很顺利。但有一个障碍。

在 1.x 中,以下代码可以让我们在服务器仍在写入其各自的 OutputStream 时获取 InputStream:

final ClientResponse response = webResource
.accept(acceptHeader)
.get(ClientResponse.class);
final InputStream stream = response.getEntity(InputStream.class);
/* Process the stream, waiting if necessary */

我们将其用作一种服务器发送事件(在我们发现 sse 之前),但类似且更常见的问题是下载大文件。 Jersey 2.x 代码如下所示:

final Response response = webTarget
.request()
.accept(acceptHeader)
.get(); /* debug shows this call hanging */
final InputStream stream = response.getEntity(InputStream.class);
/* Process the stream, waiting if necessary */

get() 方法挂起,因为服务器从未关闭连接。幸运的是,在我们的例子中,服务器只是等待“事件”发送到客户端,但如果客户端正在下载一个 64 GB 的文件...

最佳答案

事实证明问题出在服务器端。

在 Jersey 1.x 中,服务器没有缓冲响应(或者我们已经覆盖了该行为并忘记了)。解决方案是将属性 jersey.config.contentLength.buffer 设置为 0。这会阻止服务器缓冲,并且此问题中列出的代码无需修改即可工作。

关于java - 使用 Jersey 2.x 客户端,如何在服务器仍在写入其 OutputStream 时从 InputStream 读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31864926/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com