Сегодня мы поговорим о программе для обновления файлов на стороне клиента или апдейтере, как работают данные программы, какие используются алгоритмы, и как это работает у нас.
Подготовка и запаковка файлов.

В первую очередь апдейтеру нужно знать с какими файлами он будет работать, для этого есть вторая программа для сборки файлов для обновления.
Данная программа не только максимально сжимает файлы с помощью Zip библиотек, а также списывает с файлов контрольные хеш суммы и их рамеры. Для расчета хеш сумм используется алгоритм CRC32 о котором будет рассказано подробнее в следующих топиках. Для файлов генерируется карта файлов в формате xml, для того чтоб апдейтер знал с что же ему предстоит качать.

Результатом сборки файлов является корневая папка со всеми файлами, сжатыми в архивы, а так же файл UpdateInfo.xml с подробной картой файлов для апдейтера. Именно эти данные и заливаются на хостинг, с которого в последующем и будет читать наш апдейтер.
Загрузка файлов и их обработка.
Каждый апдейтер при обновлении получает карту файлов и начинает сравнивать уже имеющиеся файлы с полученным эталоном. Сначала наш апдейтер проверяет присутствие файла, после проверяет размер файла, если же размер совпадает в ход вступает более долгая операция подсчета контрольной суммы. Таким образом мы гарантируем что файлы будут приведены к эталону, прописанному в файле обновления.
У нас есть информация по файлам, которые не прошли проверку, что же дальше?
Бекапим, качаем, распаковываем, все делаем в одно время.

Для скачивания и распаковки организованно две очереди-конвейера. Они ждут продукты как конвейеры на фабриках. Как только загрузился архив файла он сразу же переходит в очередь на распаковку, что позволяет не ждать пока распакуется скачанный файл, а начать качать следующий.
Скачивание происходит через обычное HTTP, поэтому для хостинга достаточно открыть публичный доступ к папке с подготовленными файлами для апдейта.
После скачивания обязательно проверяем контрольные суммы файлов, потому что мы отвечаем за надёжность и доставку только правильных файлов, в противном случае предпринимаем повторную попытку загрузки.
Итоги:
И так, подводя итог, что же такое апдейтер в 3х пунктах:
- Сбор информации по файлам
- Проверка файлов по трем уровням
- Скачивание и распаковка не прошедших проверку файлов.
Сложно ли это? Думаю, нет, но даже тут есть уйма подводных камней.
Что ж на этом все, спасибо за внимание!
По всем вопросам welcome на форму связи.