Показать сообщение отдельно
Старый 20.02.2012, 13:12   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Обновление

#2 - посредника, также делаю.
И описал ты в #3, именно его, посредника.

Если это клиентское ПО, то нужен отдельный Updater, который будет делать всю работу, он может также работать как отдельный процесс - подготавливаться к обновлению, но осуществлять его должен вынуждая перезапустить приложение.
Это как в Firefox'е, обновления делать, и других ПО.

Если это серверное ПО, то тут уже сложнее, т.к. серверные системы можно разбить на модули, которые по сути отвечают за разную логику, и работают весьма независимо. Например модули по обработке сетевых пакетов - это могут быть подключаемая динамично библиотека, и используя рефлекцию и спользуемая.
Тут можно замутить динамичную замену длл, но также нужен механизм очереди запросов и т.п. в сам модуль. Это не просто реализовать, т.к. если к примеру это модуль обработки пакетов, то если именно заменять - будет большая очередь образовываться.
Можно подключать новую, перенаправлять все запросы на неё, затем когда старый модуль перестаёт использоваться - отключать.

Но подобные фичи очень не просты в использовании, т.к. требуют весьма мощной архитектуры, и стабильной.

Серверное ПО, также может состоять из отдельных приложений, и использовать внутренние методы коммуникации, например используя отличную библиотеку ZeroMQ, которая для кластерных систем вообще шик.
Таким образом продумать систему коммуникации приложений, и далее дело уже в шляпе, запуск и остановка приложений - и будет их обновлением, при этом при корректной реализации, не мешающим работе сервера.
(Offline)
 
Ответить с цитированием