发生连接错误时采取的最佳工作流程是什么。 假设我们有一个连接到中间层的客户端。
class MyClient{
...
void callServer(){
try{
middletier.saveRecord(123);
}catch(...){
// log the error
// what to do next (notify the user, take the same step again)?
// reinitialize connection ?
}
}
}
如果发生连接错误怎么办(超时,断开连接......)
我应该通知用户连接有问题并再试一次吗? 某些事情可以自动完成,对用户是否透明?
我喜欢的是,不要打扰用户有错误,然后告诉用户下一步该做什么 那么处理此类错误的最佳工作流程是什么?
答案 0 :(得分:3)
我强烈推荐Michael Nygards“发布它!”花了很多时间解释如何使您的软件更健壮。
答案 1 :(得分:2)
这绝对取决于应用要求。有时最好立即通知用户,有时最好在通知用户之前多次重试请求。您必须与您的客户/分析师协商。
答案 2 :(得分:2)
取决于......如果操作是由用户交互引起的,则告知用户。用户可以决定他想要重试的频率。代码可能会自行重试,但如果超时,则用户可能会等待几分钟(或中止操作未获得任何反馈)。
如果是后台任务,请在延迟一段时间后重试(但不能无限制 - 最终中止操作)。您可以重新初始化连接,这取决于所使用的技术以及是否使用连接池。
当然,如果您想投入更多时间,可以采用不同的方式处理不同的错误。首先,区分永久性错误(几分钟内重试无效)和间歇性错误(下次可能没问题)。例如,如果连接断开,您可以使用新连接重试(可能防火墙由于不活动而丢弃了打开的连接)。但是你可能无法对超时(可能是网络配置问题)或“找不到HTTP 404”做任何事情(假设您无法更改用于HTTP呼叫的URL)。
您可以在“诊断和修复”组件中收集所有这些知识。
我还建议阅读“发布它!”。
答案 3 :(得分:0)
从调用者MyClient
的角度来看:一般来说,失败的方法调用应该使MyClient
处于调用之前的状态。这意味着您应该注意如何恢复前middletier.saveRecord(123);