Обнаружение потери соединения для исправления шлюза? (Быстрая починка)
-
11-07-2019 - |
Вопрос
Я пытаюсь найти хороший способ обнаружить потерю связи. Р>
Мой адаптер реализован как Fix :: Application на основе одного из примеров. Для подключения к шлюзу исправлений используется инициатор сокета. Р>
Когда я отключаю интернет, требуется около 30 секунд для запуска метода Fix :: Application onLogout. Кажется, что некоторый базовый класс будет знать, что существует проблема с сокетом намного раньше. Есть ли быстрый способ зацепиться за это?
Решение
Лучший способ решить эту проблему - уменьшить интервал сердцебиения, чтобы вы знали об этом раньше. Я не знаю ни одного сообщения, которое запускается из-за потери соединения TCP, но я не думаю, что QuickFix также прослушивает события ОС. Хотя, если бы было такое сообщение, оно могло бы пройти через событие fromAdmin. Р>
Вы разместили свой вопрос на QuickFix DL?
Другие советы
Возможно, что используемый вами механизм исправлений не перезванивает, когда TCP отключен, или он вызывает что-то, кроме onLogout. Поскольку вы используете исправление, я предполагаю, что оно вызывает выход из-за пропущенных импульсов.
Быстрый способ - заглянуть в код и проверить, где обрабатывается закрытие сокета и какой путь выполняется, когда это происходит.
Сам TCP поставляется с собственным механизмом пульса, который называется SO_KEEPALIVE . Проблема в том, что интервал по умолчанию для этого пульса может достигать 2 часов. Это настраивается на уровне ОС. Таким образом, теоретически вы можете включить SO_KEEPALIVE, настроить разумный интервал пульса на уровне операционной системы и быть счастливым. Однако, поскольку, как уже говорилось, это сильно зависит от ОС, большинство приложений предпочитают реализовывать пульс на уровне приложений, и FIX не является исключением. Сюда следует уменьшить интервал пульса FIX, особенно если вы полагаетесь на отмену при отключении, а дополнительные секунды необнаруженной потери соединения могут привести к нежелательному выполнению заказа. Шлюз FIX, реализованный поверх любого механизма исправлений, должен поддерживать готовую конфигурацию пульса. Для примера посмотрите CoralGateway . (Отказ от ответственности: я один из разработчиков CoralGateway)