泽西长期运行请求超时

时间:2013-09-24 14:43:27

标签: java http tcp jersey

我使用Jersey HTTP服务器以及Jersey客户端来处理REST请求。

客户端将文件发送到服务器,服务器处理该文件并向客户端返回响应。我的问题是,服务器上的处理可能需要几分钟,甚至可能需要1 / 2h。

我希望客户端知道请求是否在响应中失败或成功。但是我将客户端上的readTimeout设置为60s,因为我读到,将它设置为0是一种不好的做法。因此,我有时会在客户端上获得SocketTimeoutException

禁用readTimeout(将其设置为0)是否安全? connectTimeout仍然是10秒。

或者我可以使用TCP保持活着吗?据我了解,这只会在几分钟的大型间隔中发送这些数据包(取决于操作系统)。

我还能做什么,而不是立即使用令牌返回,然后如果处理成功,则使用令牌轮询服务器?我在某处读到了有关心跳包的内容。这可以用吗?

1 个答案:

答案 0 :(得分:1)

显然,您不应该将超时设置得太高,因为这会使线程等待。有几个请求会让你有很多线程等待并导致服务器干扰。

相反,如果轮询服务器以查看请求是否准备就绪不是您想要做的事情,我建议您在请求中包含某种标识符,并让服务器在准备好时返回答案如果包含相应的标识符,则在客户端匹配请求和响应。