我正在编写一些客户端/服务器软件,我面临以下设计问题。通常,我非常自由地使用VERIFY宏 - 如果用户的机器出现问题,我希望软件失败并记录错误以便修复。我从来不会忽视任何错误。
但是,我现在正在写一台服务器。如果服务器死机,许多客户端都会关闭,因此服务器应该尽可能少地死掉。因此,我不知道如何处理一些我认为是致命异常的条件。
例如,我从未登录的用户那里获得了一个网络数据包。即使它不应该发生,我也有足够的经验知道“不可能”的错误会不时发生。所以我很确定如果我在这些情况下发生致命错误,服务器最终会崩溃。另一方面,我可以记录并忽略错误并继续,但我担心一些错误可能会以这种方式检测不到。
在这样的情况下你会做什么?
答案 0 :(得分:3)
如果你可以从错误中恢复,那么显然它不是致命的。如果你能记录错误并继续执行,我看不到失败的好处 - 最重要的是你已经在日志中捕获了错误。如果你可以恢复并继续正常运作,那么这是最好的课程。
您还应该另外实施一个通知系统(server monitoring),根据错误级别,它会以不同的紧急程度通知您,以便您在时间紧迫的情况下尽快接听。对于服务器,存在通用系统,例如Nagios和Munin。你应该看看他们做了什么,看看你是否可以从他们那里拿走一些东西并将它们集成到你的系统中。
无论如何,您应该尝试确保客户端实例尽可能为沙盒。一个客户端线程不应该取下整个服务器 - 至少(至少在理论上)。