我的应用程序如何检测客户端过早断开连接?
How does my application detect a premature disconnect by a client?
当我调试使用 Restlet 的服务器应用程序时,客户端(这是一个移动应用程序)抛出 TimeoutException,没有获取数据,但我的服务器应用程序不知道。应用程序假定客户端已收到其数据。我的应用程序如何检测到客户端没有获取数据?
用例不是调试,但我可以想象服务器可能足够慢以致于客户端抛出超时异常,或者服务器应用程序没有注意到的其他过早断开连接的原因。
我可以采取的一种方法是内置对接收数据的应用程序级确认。但这使我的申请更加复杂。
你不能,但你也不应该这样做。如果客户端没有得到数据,那么它总是可以再次询问。 RESTful 协议确实必须支持这种东西。
例如,如果客户端执行 POST 执行某些操作,则它必须能够:
1) 重新POST相同的数据,执行操作只有当它还没有完成,并且return响应之前可能遗漏的数据。这通常是通过在客户端或先前请求的服务器上生成的某种事务 ID 来完成的;或者
2) 检查操作是否成功,如果不成功则重试,如果成功则重新请求响应数据。同样,为此通常需要某种先前建立的交易 ID。
此外,如果您遇到实际用户不确定某些操作是否已成功完成的情况,则需要一些 UI 他可以访问以检查其状态。
当我调试使用 Restlet 的服务器应用程序时,客户端(这是一个移动应用程序)抛出 TimeoutException,没有获取数据,但我的服务器应用程序不知道。应用程序假定客户端已收到其数据。我的应用程序如何检测到客户端没有获取数据?
用例不是调试,但我可以想象服务器可能足够慢以致于客户端抛出超时异常,或者服务器应用程序没有注意到的其他过早断开连接的原因。
我可以采取的一种方法是内置对接收数据的应用程序级确认。但这使我的申请更加复杂。
你不能,但你也不应该这样做。如果客户端没有得到数据,那么它总是可以再次询问。 RESTful 协议确实必须支持这种东西。
例如,如果客户端执行 POST 执行某些操作,则它必须能够:
1) 重新POST相同的数据,执行操作只有当它还没有完成,并且return响应之前可能遗漏的数据。这通常是通过在客户端或先前请求的服务器上生成的某种事务 ID 来完成的;或者
2) 检查操作是否成功,如果不成功则重试,如果成功则重新请求响应数据。同样,为此通常需要某种先前建立的交易 ID。
此外,如果您遇到实际用户不确定某些操作是否已成功完成的情况,则需要一些 UI 他可以访问以检查其状态。