对于 IdTCPServer,引发什么异常以进行清理是否重要?
For IdTCPServer, does it matter what exception is raised for it to clean up?
我从很多 questions here 中了解到,Indy TCP Server 依赖异常来在使用后清理连接。
我手头有一台服务器,其编码方式是异常由代码处理,不会为 Indy 重新引发。
在理想的世界里,我会重写它来满足这个要求。可悲的是,我在一个 真实的 世界中,没有时间也没有人力资源在需要修复的时候进行此类修复。
服务器和连接有一个有趣的 属性,但是:处理完全发生在 一个 OnExecute
运行 中。这意味着我知道一个事实,即在 OnExecute
过程结束时,连接一定已经关闭,并且预计客户端尚未连接。
所以,我正在考虑做一个简单的卑鄙把戏:在 OnExecute
代码的末尾,我可以 raise
一个通用的 Indy 异常,而不是简单地返回,例如 EIdException
,以便 Indy 捕获它并执行其清理过程。
所以,我的问题是,对于 Indy 清理连接,从 OnExecute
引发什么异常是否重要?
我可以提出 EIdException
吗?或者对于这种情况,最好提出 Indy 的任何其他异常?
请注意,我要问的是我是否可以吞下所有异常并在最后引发一个新异常,而不是建议的重新引发异常的路径。
TIdTCPServer
不 要求 引发异常。 IF 引发异常,服务器将捕获异常并触发其 OnException
事件。但是无论是否引发异常,都会执行清理。如果您确保连接在 OnExecute
事件存在之前正确关闭,那就这样吧。只要您看到服务器触发其 OnDisconnect
事件,那么一切都很好。
我从很多
我手头有一台服务器,其编码方式是异常由代码处理,不会为 Indy 重新引发。
在理想的世界里,我会重写它来满足这个要求。可悲的是,我在一个 真实的 世界中,没有时间也没有人力资源在需要修复的时候进行此类修复。
服务器和连接有一个有趣的 属性,但是:处理完全发生在 一个 OnExecute
运行 中。这意味着我知道一个事实,即在 OnExecute
过程结束时,连接一定已经关闭,并且预计客户端尚未连接。
所以,我正在考虑做一个简单的卑鄙把戏:在 OnExecute
代码的末尾,我可以 raise
一个通用的 Indy 异常,而不是简单地返回,例如 EIdException
,以便 Indy 捕获它并执行其清理过程。
所以,我的问题是,对于 Indy 清理连接,从 OnExecute
引发什么异常是否重要?
我可以提出 EIdException
吗?或者对于这种情况,最好提出 Indy 的任何其他异常?
请注意,我要问的是我是否可以吞下所有异常并在最后引发一个新异常,而不是建议的重新引发异常的路径。
TIdTCPServer
不 要求 引发异常。 IF 引发异常,服务器将捕获异常并触发其 OnException
事件。但是无论是否引发异常,都会执行清理。如果您确保连接在 OnExecute
事件存在之前正确关闭,那就这样吧。只要您看到服务器触发其 OnDisconnect
事件,那么一切都很好。