Datasnap: есть ли способ обнаружить потерю соединения во всем мире?
Я ищу, чтобы обнаружить потерю локального соединения. Есть ли способ сделать это, как с событиями на компонентах Corelabs?
Спасибо
РЕДАКТИРОВАТЬ: Извините, я попытаюсь быть более конкретным: в настоящее время я разрабатываю прототип с использованием datasnap 2009. Таким образом, у меня есть тонкий клиент, серверное приложение без сохранения состояния и сервер базы данных.
То, что я мог бы сделать, это обнаружить и обработать потерю соединения (интернет-соединение) между клиентом и серверным приложением, чтобы обработать его соответствующим образом, то есть: отобразить информативное сообщение об ошибке пользователю или обнаружить отключение сервера, чтобы молча перенаправить на другой сервер приложений.
В двухуровневой системе, которую я использовал для управления компонентами ODAC, у TOraSession есть несколько событий для решения этой проблемы.
2 ответа
Обычно при разрыве соединения событие не генерируется, если только оператор не сработал с базой данных. Это связано с тем, что нет способа узнать о потере соединения, если не происходит какой-либо пинг проверки активности.
Многие фреймворки проверяют правильность соединения, выполняя очень маленький запрос к серверу. Может быть получать время с сервера. Особенно в среде пула соединений.
Вы можете реализовать функцию проверки соединения в своем приложении в некоторых событиях базы данных (перед выполнением?). Или сделайте таймер, который проверяет каждые 10 секунд.
Создайте поток на клиенте, который периодически отправляет на сервер некоторые команды RPC "Ping" или "Heartbeat".
если это не удается, клиент знает, что что-то случилось с соединением
если сервер больше не слышит клиента в течение некоторого периода времени (например, в два раза больше интервала пульса), он может сделать вывод, что клиент отключен, однако для этого требуется сервер с состоянием (и ваш проект не имеет состояния, поэтому потребуется обработка событий). во вторичной системе, которая может передаваться через очередь сообщений)