微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何启动/停止特定的会话连接

如何解决如何启动/停止特定的会话连接

我的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 举报,一经查实,本站将立刻删除。