当我调试使用 ReSTLet 的服务器应用程序时,客户端(这是一个移动应用程序)抛出 TimeoutException,没有获取数据,但我的服务器应用程序不知道。应用程序假定客户端已收到其数据。我的应用程序如何检测到客户端没有获取数据?
用例不是调试,但我可以想象服务器可能足够慢以致于客户端抛出超时异常,或者服务器应用程序没有注意到的其他过早断开连接的原因。
我可以采取的一种方法是内置对接收数据的应用程序级确认。但这使我的申请更加复杂。
最佳答案
你不能,但你也不应该必须这样做。如果客户端没有得到数据,那么它总是可以再次询问。 RESTful 协议(protocol)确实必须支持这种事情。
例如,如果客户端执行执行某些操作的 POST,那么它必须能够:
1) 重新POST相同的数据,只有在还没有完成的情况下才执行操作,并返回之前可能遗漏的响应数据。这通常是通过在客户端或先前请求的服务器上生成的某种事务 ID 来完成的;或
2) 检查操作是否成功,如果没有成功则重试,如果成功则重新请求响应数据。同样,为此通常需要某种先前建立的交易 ID。
此外,如果您遇到实际用户不确定某些操作是否已成功完成的情况,则需要有一些用户界面可供他访问以检查其状态。
关于java - 我的应用程序如何检测客户端过早断开连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33741953/