1

我正在编写一些客户端/服务器软件,并且面临以下设计问题。通常,我非常随意地使用 VERIFY 宏 - 如果用户的机器出现问题,我希望软件失败并记录错误以便修复。我从不喜欢忽略任何类型的错误。

但是,我现在正在编写一个服务器。如果服务器死了,很多客户端就会宕机,所以服务器应该尽可能少地死掉。因此,我不知道如何处理一些我认为是致命异常的情况。

例如,我从一个没有登录的用户那里得到一个网络数据包。即使它不应该发生,我有足够的经验知道“不可能”的错误确实会不时发生。所以我很确定如果我在这些情况下犯了致命错误,服务器最终会崩溃。另一方面,我可以记录并忽略错误并继续,但我担心一些错误可能会以这种方式未被检测到。

在这种情况下你会怎么做?

4

1 回答 1

3

如果您可以从错误中恢复,那么显然它不是致命的。如果您可以记录错误并继续执行,我看不到失败的好处 - 最重要的是您已经在日志中捕获了错误。如果您能恢复并继续正常运作,那是最好的课程。

您还应该实施一个通知系统(服务器监控),该系统会根据错误级别以不同程度的紧急程度通知您,以便您尽快处理时间紧迫的事情。有类似服务器的通用系统,例如NagiosMunin。您应该看看他们做了什么,看看您是否可以从他们那里获取一些东西并将其实施/集成到您的系统中。

无论如何,您应该尽量确保客户端实例尽可能沙盒化。关闭的客户端线程不应该关闭整个服务器 - 永远(至少在理论上)。

于 2009-01-05T19:33:54.050 回答