Обнаружение потери соединения для исправления шлюза? (Быстрая починка)

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 948
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

Да, QuickFIX плохо обрабатывает все ошибки сокетов (даже при установлении нового соединения).

John Zwinck 17.01.2010 04:13
Ответ принят как подходящий

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

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

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

Другие вопросы по теме