@acra

Как обновлять TCP сервер с подключенными клиентами?

Имеется TCP сервер, периодически приходится обновлять серверное ПО, при этом останавливается сервер и запускается обновленный, клиенты опять подключаются. Как организовать обновление ПО сервера без отключения клиентов?
  • Вопрос задан
  • 460 просмотров
Пригласить эксперта
Ответы на вопрос 3
@res2001
Developer, ex-admin
Как в nginx - запускается вторая копия процесса уже обновленного, которая принимает новые соединения, а старые дообрабатывает старый. Старый, конечно, должен при этом закрыть слушающий сокет.
Когда все соединения обработает, он сам завершается. Механизм сложный в реализации, но тут простого и не будет.

Еще где-то видел такой подход : слушающий процесс и обработчики реализованы в отдельных библиотеках как плагины. Плагины можно загружать и выгружать на лету. При таком механизме становится довольно удобно обновлять приложение - можно обновлять только плагин.
Ответ написан
Представляется, что Вы должны сделать интерфейс-прослойку, сохраняющую все данные о текущем подключении клиентов (включая вплоть до протокола прикладного уровня) в структуре данных, доступной одновременно двум процессам (удаляемому и запускаемому), а также средствами ОС уметь share сокет и все его хендлы между двумя разными процессами ( для Windows - https://msdn.microsoft.com/en-us/library/windows/d... ).

Действительно ли в Вашем случае такой объем разработки стоит обсепечения неразрывности обслуживания ?
Ответ написан
Комментировать
@malbaron
так называемое сине-зеленое обновление + graceful restart делают сие вообще незаметным.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы