Обнаружение потери соединения для исправления шлюза? (Быстрая починка) - PullRequest
2 голосов
/ 25 ноября 2008

Я пытаюсь найти хороший способ обнаружить потерю соединения.

Мой адаптер реализован как Fix :: Application на основе одного из примеров. Для подключения к шлюзу исправлений используется инициатор сокета.

Когда я отключаю интернет, требуется около 30 секунд для запуска метода Fix :: Application onLogout. Кажется, что некоторый базовый класс будет знать, что есть проблема с сокетом намного раньше Есть ли быстрый способ зацепиться за это?

Ответы [ 3 ]

4 голосов
/ 06 марта 2009

Лучший способ решить эту проблему, вероятно, состоит в том, чтобы уменьшить интервал сердцебиения, чтобы вы знали об этом раньше. Я не знаю ни одного сообщения, которое запускается при потере TCP-соединения, но я не думаю, что QuickFix также прослушивает события ОС. Хотя, если бы было такое сообщение, оно могло бы пройти через событие fromAdmin.

Вы разместили свой вопрос на QuickFix DL?

2 голосов
/ 25 ноября 2008

Возможно, что используемый вами механизм исправлений не перезванивает, когда TCP отключен, или он вызывает что-то, кроме onLogout. Поскольку вы используете исправление, я предполагаю, что оно вызывает выход из-за пропущенных импульсов.

Быстрый способ - заглянуть в код и проверить, где обрабатывается закрытие сокета и какой путь выполняется, когда это происходит.

1 голос
/ 30 марта 2015

Сам TCP поставляется с собственным механизмом пульса, который называется SO_KEEPALIVE . Проблема в том, что интервал по умолчанию для этого пульса может достигать 2 часов. Это настраивается на уровне ОС. Таким образом, теоретически вы можете включить SO_KEEPALIVE, настроить разумный интервал пульса на уровне операционной системы и быть счастливым. Однако, поскольку, как уже говорилось, это сильно зависит от ОС, большинство приложений предпочитают реализовывать пульс на уровне приложений, и FIX не является исключением. Сюда следует уменьшить интервал пульса FIX, особенно если вы полагаетесь на отмену при отключении, а дополнительные секунды необнаруженной потери соединения могут привести к нежелательному выполнению заказа. Шлюз FIX, реализованный поверх любого механизма исправлений, должен поддерживать готовую конфигурацию пульса. Взгляните на CoralGateway для примера. (Отказ от ответственности: я один из разработчиков CoralGateway)

...