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