【发布时间】:2017-09-24 18:13:15
【问题描述】:
所以我有一个项目,我需要在两个 FIX 报价主机之间创建故障转移,以防万一发生故障。
FixApplication (IApplication) OnLogout() 可以很好地将事件挂钩到套接字被删除或您注销时。这很简单。但这仅在套接字连接成功启动时才有效。
如果您启动应用程序并且主机已关闭,则实际上不会在任何地方为此调用任何方法。不在 IApplication 中,也不在套接字 IInitiator 中。也不会在任何地方引发错误,QuickFix 启动器只会静默重试。
我现在正在使用带有回调的计时器来经常手动轮询并检查 Initiator IsLoggedOn() 是否为假。然后触发故障转移。
但这真的很笨重而且不优雅。
在网络连接和会话成功建立之前,我是否可以使用任何其他事件或方法来接收套接字网络故障的通知?
谢谢!
Timer t = new Timer(5000)
t.Elapsed += CheckSocketConnected;
private void CheckSocketConnected(object source, ElapsedEventArgs e)
{
var connected = socketInitiator.IsLoggedOn;
if (!connected)
{
SwitchToAlternateProvider();
}
}
【问题讨论】:
-
'如果您启动应用程序并且主机已关闭,则实际上不会在任何地方为此调用任何方法。' - 你等了多少分钟?
-
等了 5 分钟。它只是自己重试几次(从它自己的调试日志中可以看出)。已将登录超时设置为较短的时间,这只会触发重置。没有在 Initiator 或 Application 上调用任何实际事件
-
如果远程主机宕机了,你怎么能指望它通知你它宕机了?
-
因为这是一个事件。 SocketInitiator 在您启动 .Start() 后进行连接调用。当根据 loginTimeOut 设置连接失败或超时时,它肯定会在某处通知您错误或事件类型消息。这似乎没有发生。
-
Rupweb - 是的,正是我的困境。除了一个事件日志和一个字符串消息条目之外别无其他。
标签: c# sockets quickfix quickfixn