Также есть некоторые усилия, чтобы добавить больше функциональности, чтобы помочь с этим в Twisted.

работал набор серверов потокового аудио, все они используют Twisted, и они, конечно, на Python. Они работают, но проблема продолжает беспокоить меня, когда я обнаружил там какие-то ошибки на работающем сервере или я хочу добавить что-то на сервер, мне нужно остановить их и запустить. В отличие от HTTP-серверов, их можно перезапускать в любое время, но не с серверами потокового аудио. После перезапуска сервера потоковой передачи мои пользователи столкнутся с отключением.

Я попытался настроить люк (ssh-сервис для Twisted серверов, вы можете войти в систему и набрать код Python в консоли, чтобы что-то сделать), и подключиться к консоли, перезагрузить модули Python на лету. Иногда это работает, но сложно контролировать. Вы никогда не знаете, сколько экземпляров старого класса находится на сервере, и некоторые из них могут быть труднодоступными, а отношения класса будут очень сложными. Кроме того, это может работать в некоторых ситуациях, но иногда вам действительно нужно перезапустить сервер, например, вы запускаете сервер с селекторным реактором и хотите вместо этого запустить его с реактором epoll, после чего вам нужно его перезапустить. Другой пример, когда использование памяти становится слишком высоким, вы также должны перезапустить их.

Чтобы построить такую ​​систему, мне в голову приходит идея, я думаю, что возможно передать эти соединения и данные из одного процесса в другой. Например:

У нас есть сервер с именем Broadcasting, и запущенный экземпляр находится под rev.123, и мы хотим заменить его на rev.124.

Broadcasting rev.123 is running....
Startup Broadcasting rev.124 ....
Broadcasting rev.124 is stand by
Hand over connections from instance of rev.123 to instance of rev.124
Stop Broadcasting rev. 123 instance

Это возможно? Я понятия не имею, делает ли время жизни дескрипторов сокетов привязанными к процессам или нет, я думал, что сокеты, созданные процессом, будут закрыты, когда процесс создателя будет убит, но я не уверен. Если это возможно, есть ли какие-либо рекомендации или статьи для разработки такого механизма горячей замены кода? И может ли что-то достичь того, чего я хочу, чтобы Twisted уже был выполнен?

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос