3

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

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

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

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

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

除了立即使用令牌返回然后在处理成功时使用令牌轮询服务器之外,我还能做些什么吗?我在某处读到了一些关于心跳包的东西。这个可以用吗?

4

1 回答 1

1

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

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

于 2013-09-24T14:47:29.550 回答