gpt4 book ai didi

java - 我可以在几个 readLine() 之后设置 HttpConnectionParams.setSoTimeout()

转载 作者:行者123 更新时间:2023-11-30 05:09:09 25 4
gpt4 key购买 nike

我正在尝试编写一个基于JAVA的comet HTTP流。我为此使用 apache httpClient 4.x。由于它是 Comet HTTP 流,因此所有事件都以分块数据的形式到达客户端。由于连接可能会长时间保持打开状态,因此我尝试在来自服务器的一些 readLine() 数据后实现 SO_TIMEOUT 的动态设置。

当我在 BufferedInputStream 的 readLine 之后设置 SO_TIMEOUT 的值时,它没有生效,它仍然使用在execute()方法调用之前设置的原始 SO_TIMEOUT 值。

以下是apache网站上SO_TIMEOUT的定义:定义套接字超时(SO_TIMEOUT),以毫秒为单位,这是等待数据的超时时间,或者换句话说,两个连续数据包之间不活动的最大时间段。超时值为零被解释为无限超时。

根据上面的定义,SO_TIMEOUT 值应该在每个分块数据到达时由 apache httpclient 重置。如果是这种情况,它应该接受我较新的 SO_TIMEOUT 值。关于如何在读取 BufferedInputStream 中的几行后设置 SO_TIMEOUT 值有什么想法吗?

最佳答案

As per the above definition, SO_TIMEOUT value should get reset by the apache httpclient on the arrival of every chunked data.

我认为您正在阅读引用的 javadoc 的含义,这并非作者的本意。我不读文本意味着您可以在读取响应流时动态调整超时。

事实上,如果您检查 setSoTimeout() 的代码并跟踪使用该参数的位置,很明显,仅在要创建 HTTP 方法时才使用 value 。该时间之后所做的更改不会影响当前请求或响应的处理方式。查找HttpMethodDirector.applyConnectionParams

Any idea on how I can set the SO_TIMEOUT value after reading couple of lines form BufferedInputStream?

我认为最好的选择是扩展 HttpConnection 类以添加一个更改连接套接字的 SO_Timeout 的方法。

关于java - 我可以在几个 readLine() 之后设置 HttpConnectionParams.setSoTimeout(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074253/

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