如何检测 Thrift 中的服务器断开连接?

How to detect server disconnection in Thrift?

注意:This similar question问的是不同的事情(在服务器端检测客户端断开连接)。


我有一个 C# Thrift 客户端通过命名管道传输连接到 C++ Thrift 服务。当 C++ 服务终止时,即当连接不再可用时,我想从客户端 检测 。我试着查看 TTransport.IsOpen 属性,但无论如何它仍然是 true。有没有一种干净的方法来实现它(无需使用心跳功能扩展我的服务)?

为了避免对平台乃至所选传输层的依赖,我最终向我的服务添加了一个空操作 ping 调用。这由客户端从后台线程定期调用,并且在服务器上不执行任何操作。效果是管道的 IsOpen 属性 已更新,并且在尝试调用某些内容时我也会得到 IOException 。这远非理想,但至少有效,而且我已经出于其他原因包装了我的服务,因此我可以将这种丑陋隐藏在更好的界面后面。