Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Построение системы обновлений

5.7K
05 июня 2012 года
Lindemann66
193 / / 21.07.2011
Всем привет!
Давно я ничего не спрашивал на этом форуме)

Программа: написанное на Qt приложение, БД - SQLite
Вопрос: к тем, кто имеет опыт в проектировании и реализации систем обновлений
Какие есть варианты?
Ну и просто хотелось бы поделиться опытом со сведущими в этой области людьми

Навскидку
  • Вариант, который сейчас у нас.[list]
  • программа периодически запрашивает с сервера файл, содержащий информацию об актуальной версии
  • если версия отличается, качается архив с актуальными файлами
  • файлы из архива извлекаются в папку с приложением, с заменой уже существующих
  • также скачиваются скрипты обновления бд, сгенеренные мерджерами SQlite'овских БДшек, и выполняются по отношению к текущей БД юзера
  • Более сложный вариант
    • На сервере лежит файл, содержащий названия файлов и их хэш-суммы
    • На клиенте вычисляются хэш-суммы всех файлов, и сверяются со списком хэш сумм файлов сервера
    • Скачиваются те файлы, хэш-суммы которых либо отличаются от текущих, либо которых нет в принципе
    • БД обновляется таким же образом, как и в варианте 1
  • Вариант с дистрибутивом
    • Скачивается дистрибутив программы, и выполняется установка в папку с программой, как бы обновляя ее содержимое
    • Если в данной папке хранится старая БД, то она мерджится - либо при установке, либо при первом запуске
    [/list]
    Проблемы, которые есть в любом случае:
    - Необходимо, чтобы в архиве на сервере лежали в ЛЮБОМ СЛУЧАЕ все файлы, которые потребуются
    - Если какого-то файла в архиве нет, будет работать неправильно
    - Проблема обновлений конфигурационных файлов чтобы сохранить пользовательские настройки...

    Какие мысли по всему этому?:)
  • 277
    05 июня 2012 года
    arrjj
    1.7K / / 26.01.2011
    На практике встречаю регулярно все 3 вида. Но первый и второй смешанные 1/2) - менеджеры игрушек (4game , steam) , антивирусы со своими базами. 3) skype uTorrent, все менеджеры пакетов в линухе ><.

    Вобщем как 1/2 вариант работает:
    это: программа периодически запрашивает с сервера файл, содержащий информацию об актуальной версии
    и это: На сервере лежит файл, содержащий названия файлов и их хэш-суммы
    в одном файле. Проверяем "актуальность" версии и качаем новые файлы. во всех менеджерах есть вариант запустить полную проверку файлов ручками. Почему так? - потому что проверять при каждом запуске 5-10 Гиг файлов напряжно. Если прога маленькая - то это не критично. Еще один момент - вирусня. Комп вашего клиента вполне может быть заражен вирусней и как например делает qip при расхождении чексуммы - тупо не запускается предлагая себя снова и снова обновить - не вариант. А вот антивирусники (например dr.web) полностью себя проверяют при запуске. Также у веба интересный момент при обновлении: если он видит что файл обновился он сначала запрашивает с сервака патч для файла, если нет - сжатую версию файла и только потом полную версию файла - типа трафик экономит :)
    Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог