A
A
acra2017-01-18 16:22:50
Qt
acra, 2017-01-18 16:22:50

How to update TCP server with connected clients?

There is a TCP server, periodically it is necessary to update the server software, while the server stops and the updated one starts, the clients reconnect. How to organize a server software update without disconnecting clients?

Answer the question

In order to leave comments, you need to log in

3 answer(s)
R
res2001, 2017-01-18
@res2001

Как в nginx - запускается вторая копия процесса уже обновленного, которая принимает новые соединения, а старые дообрабатывает старый. Старый, конечно, должен при этом закрыть слушающий сокет.
Когда все соединения обработает, он сам завершается. Механизм сложный в реализации, но тут простого и не будет.
Еще где-то видел такой подход : слушающий процесс и обработчики реализованы в отдельных библиотеках как плагины. Плагины можно загружать и выгружать на лету. При таком механизме становится довольно удобно обновлять приложение - можно обновлять только плагин.

Андрей, 2017-01-18
@OLS

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

M
malbaron, 2017-01-18
@malbaron

the so-called blue-green update + graceful restart make this generally invisible.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question