2008-11-24 72 views
2

我试图找到一个很好的方法来检测连接丢失。检测到修复网关的连接丢失? (QuickFix)

基于其中一个示例,我的适配器作为Fix :: Application实现。它使用套接字启动器连接到修复网关。

当我拔掉它需要大约30秒修复互联网::被解雇应用的onLogout方法。看起来像一些基础类会更早地意识到套接字存在问题。有没有一个快速的方法把这个钩住了?

回答

4

解决这个很可能是降低你的心跳间隔,所以你知道迟早的最好方法。我不知道任何因TCP连接丢失而引发的消息,但我不认为QuickFix正在监听OS事件。尽管如果有这样的消息,它很可能会通过fromAdmin事件。

您是否将您的问题发布到QuickFix DL?

+0

这工作,我测试了它。 – 2009-08-07 12:39:05

2

这有可能是你使用时,TCP断开,或者它比其他onLogout东西回调不回调修复引擎。 由于您正在使用修复程序,因此我猜测它会因错过心跳而强制退出。

快速的方法是寻找到的代码,并检查其中插座靠近被处理,而当这种情况发生什么路径执行。

+1

呀,QuickFix的不处理所有插座错误以及(甚至建立新的连接时)。 – 2010-01-17 01:13:47

1

TCP本身附带一个名为SO_KEEPALIVE本地心跳机制。问题在于此心跳的默认时间间隔可能高达2小时。这是在操作系统级别配置的。所以理论上你可以打开SO_KEEPALIVE,在操作系统级配置一个合理的心跳间隔并且很高兴。但是,正如所说的,这非常依赖操作系统,所以大多数应用程序都选择在应用程序级别实现心跳检测,而FIX也不例外。减少您的FIX心跳间隔是这里的方法,特别是如果您依赖于取消断开连接并且多余的未检测到的连接丢失秒数可能导致不需要的命令执行。在任何修复引擎之上实施的FIX网关应该支持心跳配置。以CoralGateway为例。 (免责声明:我的CoralGateway的开发者之一)