2010-08-25 61 views
1

发生连接错误时最佳工作流程是什么。 假设我们有一个连接到中间层的客户端。处理连接错误的最佳做法

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 ? 
    } 
    } 
} 

怎么做,如果连接出现错误(超时,连接断开...)

我应该通知的连接有问题,并再次尝试用户? 是否可以自动完成,对用户透明?

我喜欢的是,不要打扰用户的错误,然后告诉用户下一步该做什么。
那么处理这类错误的最佳工作流程是什么?

回答

2

这取决于...如果动作是由用户交互引起通知用户。用户可以决定他想要重试的频率。该代码可能会自行重试,但如果是超时,则用户可能会等待几分钟(或中止未获取任何反馈的操作)。

如果是后台任务,请在延迟后重试(但不是无限 - 最终放弃操作)。您可以重新初始化连接以确保连接,这取决于使用的技术以及连接池。

当然,如果你想投入更多的时间,你可以以不同的方式处理不同的错误。首先,区分永久性错误(在几分钟内重试将无助于)间歇性错误(下次可能会出现问题)。例如,如果连接断开,您可以重新尝试一个新连接(可能由于不活动,防火墙会断开打开的连接)。但你可能无法做任何关于超时(可能是网络配置问题)或“HTTP 404 Not found”(假设你不能更改用于HTTP调用的URL)。

您可以在“诊断&修复”组件中收集所有这些知识。

我也推荐阅读“发布!”。

2

这完全取决于应用需求。有时最好立即通知用户,有时在通知用户之前多次重试请求会更好。您必须咨询您的客户/分析师。

+0

我的客户不知道这一点。他们要求我提供最好的解决方案。这就是我为什么要问个人最佳实践的原因。 – darpet 2010-08-25 10:42:45

0

从调用者的角度看MyClient:一般来说,失败的方法调用应使MyClient处于调用之前的状态。这意味着你应该小心如何恢复前middletier.saveRecord(123);