如何 start/stop 特定会话连接
How to start/stop a particular session connection
我的 QuickFIX 启动器可以管理 5 个会话(目标)。我可以使用 ReconnectInterval
来控制重连尝试频率。
假设一个会话连接给我一个问题,但我不想停止其他 4 个连接。我也不希望有问题的会话继续尝试连接。
是否有任何方法可以停止并稍后重新启动此特定会话连接?
Quickfix 不提供禁用会话的直观方法。
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 ));
}
}
上面的代码是不断尝试保持所有会话连接的循环。查了下代码,有两种方法可以避免session的连接: 1.禁用session; 2. 限制session时间范围(session初始化后没法做,所以不是有效选项)
方法pSession->isEnabled
基本上returnsSession.m_state.m_enabled
,但是没有办法访问SessionState对象的属性,一旦m_state是私有的。将 m_enabled 设置为 false 并避免连接尝试的唯一方法是调用 Session.logout()
:
FIX::SessionID session_id("FIX.4.2", "CLIENT1", "EXECUTOR");
FIX::Session* mysession = initiator->getSession(session_id);
mysession->logout();
我的 QuickFIX 启动器可以管理 5 个会话(目标)。我可以使用 ReconnectInterval
来控制重连尝试频率。
假设一个会话连接给我一个问题,但我不想停止其他 4 个连接。我也不希望有问题的会话继续尝试连接。
是否有任何方法可以停止并稍后重新启动此特定会话连接?
Quickfix 不提供禁用会话的直观方法。
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 ));
}
}
上面的代码是不断尝试保持所有会话连接的循环。查了下代码,有两种方法可以避免session的连接: 1.禁用session; 2. 限制session时间范围(session初始化后没法做,所以不是有效选项)
方法pSession->isEnabled
基本上returnsSession.m_state.m_enabled
,但是没有办法访问SessionState对象的属性,一旦m_state是私有的。将 m_enabled 设置为 false 并避免连接尝试的唯一方法是调用 Session.logout()
:
FIX::SessionID session_id("FIX.4.2", "CLIENT1", "EXECUTOR");
FIX::Session* mysession = initiator->getSession(session_id);
mysession->logout();