Создание автоматического обновления клиент / сервер - PullRequest
1 голос
/ 17 декабря 2010

Я создал автоматическое средство обновления приложений для одного из моих приложений.Это приложение из двух частей.Первая часть - это проверка версий и загрузчик обновлений.Вторая часть устанавливает загруженное обновление (чтобы обновление могло самообновляться).

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

Теперь мне необходимо создать процедуру обновления для приложения клиент-сервер.Клиентская сторона все еще может использовать тот же процесс, что и выше.Однако сервер не может этого сделать, потому что некоторые файлы, которые необходимо обновить, могут использоваться клиентом.Я думал об этом в течение пары дней и только придумал две идеи, из которых мне не нравится ни одна.

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

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

Как мне поступить?Как бы вы внедрили обновления сервера?Идеи, комментарии, вопросы?

1 Ответ

0 голосов
/ 17 декабря 2010

Если не всегда клиенты подключены к серверу, вы можете проверить наличие обновлений, загрузить их при необходимости, а затем дождаться, пока не будут подключены клиенты (или следующий перезапуск, в зависимости от того, что наступит раньше), чтобы установить его.* Если обновление имеет приоритет над клиентскими подключениями (что, по-видимому, не зависит от вашего вопроса), вы можете просто принудительно закрыть все подключения и выполнить обновление.Вы также можете отправить сообщение подключенным клиентам, чтобы сообщить им, почему они собираются отключиться.Возможно, даже дайте им 5-минутное окно, чтобы сохранить их работу и выйти из системы до перезапуска сервера.

...