ПОДСИСТЕМА ОБНОВЛЕНИЯ ПРОГРАММНЫХ ПРОДУКТОВ

 

Онух Д.О., Иванов А.Ю.

Донецкий национальный технический университет

 

Целью работы является анализ известных систем обновления программных продуктов в сети Интернет и разработка собственной системы обновления файлов.

В программных продуктах присутствует подсистема обновления файлов, с помощью которой пользователь может обновить приобретенный программный продукт. Результат такой операции зависит от конкретного программного продукта и политики обновления на данный продукт.

Анализ научно-технической литературы показывает, что следует различать системы синхронизации и системы обновления файлов. Системы синхронизации представляют собой полнофункциональные системы синхронизации между клиентами и сервером, когда клиенты могут  обновлять у себя некоторые файлы и отправлять на сервер файлы. Такие системы удобно использовать при разработке больших программных продуктов для синхронизации исходного кода проекта. Примерами данных систем является CVS (Concurrent Versions System). Системы обновления файлов позволяют клиентам только обновить данные с сервера двумя основными способами: полного обновления – при запросе клиента, сервер передает ему все файлы, которые нужны клиенту и частичного обновления – сервер передает клиенту только более новые файлы. Примерами систем обновления является: система обновлений антивирусных баз данных AVP и Maximum Protection Firewall 2006.

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

Логику всех функций в разработанном проекте реализуют клиент и сервер.

Каждому файлу обновляемого продукта присвоена своя версия. Информация о версиях файлов хранится в специальном конфигурационном файле – файле версий. При обновлении клиент посылает серверу имена файлов и их версии. Сервер анализирует данную информацию и отсылает клиенту только те файлы, у которых на сервере есть большая версия (рис.1). После окончания процесса обновления файлов клиент обновляет файл версий. На стороне клиента файл версий создается при инсталляции программы и его редактирование пользователем запрещено. Редактированием файла версий на стороне сервера занимаются администраторы распространяемого продукта.

 

 

Рис. 1. Пример обновления продукта Test.

 

Обновление файлов через сеть осуществляется посредством использования TCP протокола. Для программной реализации обмена данными по сети использованы сокеты Беркли. Данный выбор обусловлен более высокой скоростью работы сокетов Беркли по сравнению с их реализацией в высокоуровневых библиотеках классов, а также для совместимости проекта с ОС семейства UNIX. Для более эффективного обновления файлов реализован протокол более высокого, чем TCP уровня. SUPSimple Update Protocol.

Перед посылкой данных в сеть сначала посылается заголовок пакета и только потом  данные. Заголовок пакета имеет вид:

 

//header net packet

typedef struct tag_NetPacket {    

      NetAction   action;

      int         size;

}NetPacket;

где action обозначает тип пакета (OPEN, FILE и др.);

size – размер пакета.

Данные посылаются только тогда, когда размер пакета не равен нулю.

Взаимодействие между клиентом и сервером реализуется в соответствии со следующим алгоритмом. В начале обновления клиент посылает пакет OPEN с именем продукта. Сервер отвечает пакетом OPEN_RESPONSE со статусом OK или NOT_EXIST. Если сервер отвечает статусом NOT_EXIST, это означает, что данного продукта на сервере нет, и сессия закрывается. В случае удачного открытия сессии, клиент отправляет файл версий к серверу, при помощи пакетов FILES. Сервер принимает файл версий, читает собственный файл версий, сравнивает версии файлов и, если нужно посылает клиенту требуемые файлы. Назначенный файл пересылается в два шага, первым посылается пакет FILE с именем и версией файла. Затем пересылаются данные файла пакетами FILE_DATA. Посылка пакета FILE_DATA с длиной 0 означает конец передачи определенного файла. Посылка пакета FILE с длиной 0 означает конец обновления файлов. При закрытии сессии клиент посылает пакет CLOSE. Сервер отвечает CLOSE_RESPONSE.

Система обновления файлов Update System была протестирована, на операционных системах Win 2003 Server, Win XP Pro, та Win98 SE.

Проект разрабатывался с возможностью работы системы под ОС семейства UNIX [1]. Клиент разрабатывался с помощью библиотеки классов Qt 3.3.1

 

Литература

 [1]      Стивенс У.Р., UNIX: разработка сетевых приложений, "Питер", 2004 г., 1086 с.