gpt4 book ai didi

c# - Quickfix/n-没有连接超时事件或找不到主机?

转载 作者:行者123 更新时间:2023-12-03 11:59:18 28 4
gpt4 key购买 nike

因此,我有一个项目,在发生故障的情况下,我需要在两个FIX引用主机之间创建故障转移。

FixApplication(IApplication)OnLogout()非常适合将套接字挂起或注销时挂接到事件。这很简单。但这仅在套接字连接成功开始时有效。

如果启动应用程序且主机已关闭,则实际上在任何地方都不会调用任何方法。不在IApplication中,也不在套接字IInitiator中。也不会在任何地方引发错误,QuickFix启动器将只是默默地重试。

我现在使用带有回调的Timer来频繁地手动轮询,并检查Initiator IsLoggedOn()是否为false。然后触发故障转移。

但是,这确实很笨拙,并不优雅。

在成功建立网络连接和 session 之前,我还可以挂入其他事件或方法来接收有关套接字网络故障的通知吗?

谢谢!

Timer t = new Timer(5000) 
t.Elapsed += CheckSocketConnected;
private void CheckSocketConnected(object source, ElapsedEventArgs e)
{
var connected = socketInitiator.IsLoggedOn;
if (!connected)
{
SwitchToAlternateProvider();
}
}

最佳答案

好吧,在意识到QuickFix/N组件的局限性之后,如果主机关闭,我将永远不会从该库中收到任何反馈。

我的解决方法是只使用下面的代码来检查套接字是否已打开,然后再在QuickFix/n中启动连接

bool IsPortOpen(string host, int port, TimeSpan timeout)
{
try
{
using(var client = new TcpClient())
{
var result = client.BeginConnect(host, port, null, null);
var success = result.AsyncWaitHandle.WaitOne(timeout);
if (!success)
{
return false;
}

client.EndConnect(result);
}

}
catch
{
return false;
}
return true;
}

关于c# - Quickfix/n-没有连接超时事件或找不到主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44345389/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com