Сторожевой механизм Watchdog в приложении SmartPlayer

Материал из SmartPlayer

Описание ситуации

Платформа SmartPlayer теперь поддерживает работу важного механизма Watchdog, который является механизмом контроля. Данный функционал следит, чтобы система, в данном случае клиентское приложение на базе Windows OS не переставало функционировать и продолжало работать штатно.

На странице будет описано ранняя и поздняя версия реализация данного механизма для Windows OS.

Что такое Watchdog

Функционал Watchdog предназначен для автоматического контроля работоспособности клиентского приложения. Механизм отслеживает состояние системы и проверяет, продолжает ли она корректно выполнять заданные действия. Если приложение перестаёт отвечать, зависает или не передаёт контрольный сигнал, то Watchdog выполняет восстановительное действия автоматически. Например: перезапуск клиентского приложения.

Изначальная реализации Watchdog в SmartPlayer

Первая реализация Watchdog для клиентского приложения Windows представляло собой отдельное приложение, позволяющее отследить зависание процесса. Данное приложение путем опроса процесса получало информация от основного приложения.
Если приложение отправляло ответ на сообщение, то таки образом обозначало свою работоспособность и то, что оно продолжать функционировать.
Период опроса: один раз в 3 секунды.
Если ответ от клиентского приложения не был получен, то был перерыв до следующей отправки сообщения от Watchdog. Повторный запрос происходил через 5 секунд после неудачной попытки. В случае 3-ёх неудачных попыток подряд Watchdog перезапускал клиентское приложение SmartPlayer. Таким образом клиентское приложение продолжало свою работу.

Даже если клиентское приложение перестало работать, то Watchdog всё равно перезапустит его через некоторое время.

Доработанная реализация Watchdog в SmartPlayer

Доработанная реализация Watchdog предназначена для контроля зависания интерфейса клиентского приложения SmartPlayer на Windows. Ранее Watchdog отслеживал общее состояние приложения.
Если приложение продолжало работать как процесс, поддерживало соединение и не завершалось аварийно, механизм считал его работоспособным. Однако в редких случаях могла возникать ситуация, при которой само приложение оставалось запущенным, но интерфейсная часть на QML зависала и переставала отвечать.
Для обработки такого сценария в клиентское приложение был добавлен отдельный параллельный поток. Он регулярно проверяет состояние UI-потока и определяет, отвечает ли интерфейс приложения. Если UI-поток не отвечает в течение 30 секунд, Watchdog фиксирует зависание интерфейса и выполняет мягкий перезапуск клиентского приложения. Это позволяет восстановить работу SmartPlayer без ручного вмешательства пользователя.

Дополнительная информация

Если данная статья не помогает использовать функциональность по назначению или после её прочтения остаются вопросы, их можно задать в разделе "Обсуждения" вверху страницы.

Пример отображения вкладки "Обсуждения" на wiki-странице

Также дополнительную информацию можно узнать на странице Как взаимодействовать пользователю с разделом "Обсуждения".