如何解决如何启动/停止特定的会话连接
我的QuickFIX启动器可以管理5个会话(目标)。我可以使用ReconnectInterval
来控制重试频率。
假设一个会话连接给我一个问题,但我不想停止其他四个连接。我也不希望有问题的会话继续尝试连接。
是否有任何方法可以停止并稍后重新启动此特定会话连接?
解决方法
Quickfix没有提供禁用会话的直观方法。
var signatureAlgorithm = GetEllipticCurveAlgorithm(privateKey);
ECDsaSecurityKey eCDsaSecurityKey = new ECDsaSecurityKey(signatureAlgorithm)
{
KeyId = settings.Apple.KeyId
};
var handler = new JwtSecurityTokenHandler();
var token = handler.CreateJwtSecurityToken(
issuer: iss,audience: AUD,subject: new ClaimsIdentity(new List<Claim> { new Claim("sub",sub) }),expires: DateTime.UtcNow.AddMinutes(5),issuedAt: DateTime.UtcNow,notBefore: DateTime.UtcNow,signingCredentials: new SigningCredentials(eCDsaSecurityKey,SecurityAlgorithms.EcdsaSha256));
上面的代码是不断尝试保持所有会话连接的循环。查找代码,有两种方法可以避免会话连接:1.禁用会话; 2.限制会话时间范围(会话初始化后无法执行此操作,因此这不是有效的选择)。
方法void Initiator::connect()
{
Locker l(m_mutex);
SessionIDs disconnected = m_disconnected;
SessionIDs::iterator i = disconnected.begin();
for ( ; i != disconnected.end(); ++i )
{
Session* pSession = Session::lookupSession( *i );
if ( pSession->isEnabled() && pSession->isSessionTime(UtcTimeStamp()) )
doConnect( *i,m_settings.get( *i ));
}
}
基本上返回pSession->isEnabled
,但是一旦m_state为私有,就无法访问SessionState对象的属性。将m_enabled设置为false并避免尝试连接的唯一方法是调用Session.m_state.m_enabled
:
Session.logout()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。