Domanda

Sto cercando di trovare un buon modo per rilevare una perdita di connessione.

Il mio adattatore è implementato come una Fix :: Applicazione basata su uno degli esempi. Utilizza un iniziatore socket per connettersi al gateway di correzione.

Quando scollego Internet ci vogliono circa 30 secondi per attivare il metodo onLogout di Fix :: Application. Sembra che alcune classi sottostanti siano consapevoli che c'è un problema con il socket molto prima. C'è un modo rapido preso in questo?

È stato utile?

Soluzione

Il modo migliore per risolvere questo problema sarebbe probabilmente quello di ridurre il tuo intervallo di battito cardiaco in modo da sapere prima. Non conosco alcun messaggio che si attiva per una perdita di connessione TCP, ma non credo che anche QuickFix stia ascoltando gli eventi del sistema operativo. Tuttavia, sarebbe probabilmente fluire attraverso l'evento fromAdmin se ci fosse un tale messaggio.

Hai pubblicato la tua domanda su QuickFix DL?

Altri suggerimenti

È possibile che il motore di correzione che stai utilizzando non richiami quando TCP è disconnesso o richiami su qualcosa di diverso da onLogout. Dal momento che stai usando fix, immagino che forza un logout a causa di battiti cardiaci persi.

Un modo rapido sarebbe quello di esaminare il codice e verificare dove viene gestita la chiusura del socket e quale percorso viene eseguito quando ciò accade.

TCP stesso viene fornito con un meccanismo di heartbeat nativo chiamato SO_KEEPALIVE . Il problema è che l'intervallo predefinito per questo battito cardiaco può arrivare fino a 2 ore. Questo è configurato a livello di sistema operativo. Quindi in teoria puoi attivare SO_KEEPALIVE, configurare un intervallo di heartbeat ragionevole a livello di sistema operativo ed essere felice. Tuttavia, poiché, come detto, dipende molto dal sistema operativo, la maggior parte delle applicazioni sceglie di implementare il battito cardiaco a livello di applicazione e FIX non fa eccezione. Ridurre l'intervallo di battito cardiaco FIX è la strada da percorrere qui, soprattutto se si fa affidamento su annulla-su-disconnessione e secondi aggiuntivi di perdita di connessione non rilevata possono portare a esecuzioni di ordini indesiderate. Un gateway FIX implementato su qualsiasi motore di correzione dovrebbe supportare la configurazione del battito cardiaco immediatamente. Dai un'occhiata a CoralGateway per un esempio. (Dichiarazione di non responsabilità: sono uno degli sviluppatori di CoralGateway)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top