gpt4 book ai didi

jersey - 在 Jersey StreamingOutput 上调用 flush() 没有效果

转载 作者:行者123 更新时间:2023-12-04 15:32:43 25 4
gpt4 key购买 nike

我正在使用 Jersey StreamingOutput在我们升级到 Jersey 2.16 之前,它一直工作得很好。事情是这样的。我的 StreamingOuput在某些情况下产生输出非常缓慢。我确实经常写数据,但我写得很慢,一次只写一点。我打电话flush()OutputStream传递给 StreamingOutput.write()每次我写任何字节时,但 flush() 似乎没有效果。在将 8K 写入 OutputStream 之前,不会通过网络发送任何内容。 .不幸的是,在某些情况下,当写入 8K 时,客户端已超时。

我下载了一些 Jersey 源码,经过一些调试,我看到OutputStream传递给 write()UnCloseableOutputStream它包装了一个 CommittingOutputStream .
CommittingOutputStream已启用缓冲,因此在提交响应(完成)之前,flush() 本质上是无操作的。

所以,我在泡菜。我如何使用 StreamingOutput (或以其他方式直接写入输出流)并强制它在整个响应完成之前通过网络发送字节?有没有其他方法可以用 Jersey 做到这一点?我在 ResponseBuilder 上找不到任何方法去做这个。我找不到任何关闭缓冲的方法。

最佳答案

有泽西属性(property) ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER 设置缓冲区的大小,但更改它会影响 Content-Length标题(如果这对你很重要的话)。您应该阅读有关该属性(property)的文档。

An integer value that defines the buffer size used to buffer server-side response entity in order to determine its size and set the value of HTTP "Content-Length" header.

If the entity size exceeds the configured buffer size, the buffering would be cancelled and the entity size would not be determined. Value less or equal to zero disable the buffering of the entity at all.

This property can be used on the server side to override the outbound message buffer size value - default or the global custom value set using the "jersey.config.contentLength.buffer" global property.

The default value is 8192.

关于jersey - 在 Jersey StreamingOutput 上调用 flush() 没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34030904/

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