I've a situation where the feed receives a connectionEventEnum with connectionStatus::down when the feed has no active subscriptions (ie over night, over weekend etc). I would like to prevent this from happening. Is there a mechanism in RFA 8 C++ that can be used to keep the connection up?
Are there any other details in your logs that would indicate that the disconnect occurred because of no active subscriptions?
As far as I'm aware, there is no situation where you would be disconnected because you have no active subscriptions. That being said, there may be other reasons why a disconnect may be occurring. Could be network issues or applications could be stuck too long in application callbacks thus starving the main event loop from keeping regular ping messages to the server, etc. With RSSL connections there are parameters to determine if the ADS pings the client and vice versa. If these heartbeats are enabled and pinging stops the client will be disconnected.
Within the RFA C++ configuration guides, ping frequency is defined as:
You could try to keep at least one stream open or even keep the directory stream open and monitor the connection. In addition, you should reach out to your market data team to determine why a disconnect is occurring. The logs within the server should provide more details.
Thanks for your detailed response. I've been investigating further with my application and realize the time out is a result of our application not seeing any ticks on the Rssl line. Under the hood the connection is still active with Reuters, but its just that there is are low ticking instruments.
There is one way we can keep the our application happy is to create a subscription to an admin symbol such as ECON/TIME (I believe). Apart from this I'm wondering if RFA exposes the connectionPing so that we can use this to indicate the health of the connection?
I've reached out to our market data team and they provided me with some additional information on pinging and heartbeats that may help you and your team understand the issues you are encountering.
The server (ADS) you are connecting into has quite a bit of control over the heartbeats and ping intervals that can be sent to a client application. You will likely need to communicate with your market data team to better understand some of these settings. I will provide you with some of the configuration details here on the server side that will help.
The adsmon (ADS monitoring tool) screenshot below shows the pings between the client and server.
For this setup, we have the sending/receiving of ping messages every 30 seconds to keep the connection alive.
However, within the ADS you can actually turn these pings off. For example, the ADS configuration defines this stanza:
A *ads*pingTimeout : 30 A *ads*minPingTimeout : 6 A *ads*serverToClientPings : True A *ads*clientToServerPings : True
From your consumer client application, you can turn on the tracing of these ping messages to further confirm the behavior:
I pulled the above out from the RFA C++ documentation.
Hope this helps,
I seen that in the documentation but would involve a performance hit plus I think it logs it to std out.
I have been advised subscribe to ECON/TIME, as this seems to tick continuosly. Would it be possible to provide any information on this symbol? I presume its an admin symbol of some sort?