2015-04-23 184 views
1

注意:This similar question询问不同的事情(在服务器端检测到客户端断开连接)。如何检测Thrift中的服务器断开连接?


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

+1

'isOpen'只会告诉你运输是否被认为是开放的。它不验证任何句柄,套接字,管道......现在无法查看源代码,但是有没有办法获得管柄的保持?然后对它进行一些检查(WinAPI?),至少这是我的想法。 – JensG

+1

似乎只有在尝试使用IsOpen属性时才会更新IsOpen属性。我宁愿不创建依赖于这个特定的传输实现,但也许我必须:/ –

回答

1

为了避免依赖平台甚至选择的传输层,我最终添加了一个无操作ping调用我的服务。这由客户端从后台线程周期性地调用,并且在服务器上不做任何事情。其效果是更新了管道的IsOpen属性,并且在尝试调用某些内容时我还得到了IOException。这远非理想,但至少有效,我已经为其他原因包装了我的服务,所以我可以在更好的界面后面隐藏这个丑陋。

相关问题