Datasnap: есть ли способ глобального обнаружения потери соединения?

Я ищу, чтобы обнаружить потерю локального соединения. Есть ли способ сделать это, как в случае с событиями на компонентах Corelabs?

Спасибо

РЕДАКТИРОВАТЬ: Извините, я попытаюсь быть более конкретным: в настоящее время я разрабатываю прототип с использованием datasnap 2009. Итак, у меня есть тонкий клиент, серверное приложение без сохранения состояния и сервер базы данных.

Что я мог бы сделать, так это обнаружить и обработать потерю соединения (подключение к Интернету) между клиентом и серверным приложением, чтобы обработать его надлежащим образом, то есть: отобразить информативное сообщение об ошибке для пользователя или обнаружить отключение сервера для тихой переадресации на другой сервер приложений.

В 2-х уровневом, который я использовал для управления этим с помощью компонентов ODAC, в TOraSession есть некоторые события для решения этих проблем.


person Fred    schedule 13.02.2009    source источник


Ответы (2)


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

Многие фреймворки проверяют, действительно ли соединение, выполняя очень небольшой запрос к серверу. Может получать время с сервера. Особенно в среде пула соединений.

Вы можете реализовать функцию проверки соединения в своем приложении в некоторых событиях базы данных (перед выполнением?). Или сделайте таймер, который проверяет каждые 10 секунд.

person BennyBechDk    schedule 17.02.2009
comment
Я не уверен, что нет способа обнаружить потерю соединения, потому что потеря соединения базового сокета может быть обнаружена. Однако верно то, что в большинстве библиотек нет событий для этого. - person mghie; 17.02.2009

Создайте поток на клиенте, который периодически отправляет на сервер некоторые RPC-команды «Ping» или «Heartbeat».

  • если это не удается, клиент знает, что что-то случилось с соединением

  • если сервер больше не слышит клиента в течение некоторого периода времени (например, в два раза больше интервала сердцебиения), он может сделать вывод, что клиент отключился, однако для этого требуется сервер с отслеживанием состояния (и ваш дизайн не имеет состояния, поэтому потребуется обработка событий во вторичной системе, которая может быть загружена через очередь сообщений)

person mjn    schedule 15.07.2011