我的应用程序如何检测客户端的过早断开连接?

时间:2015-11-16 18:15:52

标签: java restlet

当我调试使用Restlet的服务器应用程序时,客户端(它是一个移动应用程序)抛出TimeoutException,而不是获取数据,但我的服务器应用程序不知道。该应用程序假定客户端已收到其数据。我的应用程序如何检测到客户端没有获取数据?

用例不是调试,但我可以想象服务器可能足够慢,客户端可能会抛出超时异常,或者服务器应用程序未注意到的过早断开连接的其他原因。

我可以采取的一条路径是构建对接收数据的应用程序级确认。但这使我的应用程序更加复杂。

1 个答案:

答案 0 :(得分:3)

你不能,但你也不应该这样做。如果客户端没有获得数据,那么它总是可以再次询问。 RESTful协议真的必须支持这种事情。

例如,如果客户端执行POST以执行某些操作,则它必须能够:

1)重新发布相同的数据,仅在尚未完成的情况下执行操作,并返回之前可能遗漏的响应数据。这通常通过在客户端上生成的某种事务ID来实现,或者在先前的请求中在服务器上生成;或

2)检查操作是否成功,如果没有则重试,或者如果有,则重新请求响应数据。此外,通常还需要某种先前建立的交易ID。

此外,如果您遇到实际用户不确定某些操作是否已成功完成的情况,则需要访问一些用户界面来检查其状态。