Хотя этот вопрос помечен EventMachine, универсальные решения BSD-сокетов на любом языке также приветствуются.
Некоторый фон:
У меня есть приложение, прослушивающее сокет TCP. Он запускается и завершается с помощью обычного сценария инициализации в стиле System V.
Моя проблема в том, что ему нужно некоторое время для запуска, прежде чем он будет готов к обслуживанию сокета TCP. Это не слишком долго, может быть, всего 5 секунд, но это 5 секунд, когда необходимо выполнить перезапуск в течение рабочего дня. Также важно, чтобы существующие соединения оставались открытыми и нормально завершались.
Причинами перезапуска приложения являются исправления, обновления и тому подобное. К сожалению, я нахожусь в положении, что время от времени мне нужно делать подобные вещи на производстве.
Вопрос:
Я ищу способ аккуратной передачи сокета прослушивания TCP от одного процесса к другому, и в результате получаю лишь долю секунды простоя. Мне бы хотелось, чтобы существующие соединения / сокеты оставались открытыми и завершили обработку в старом процессе, в то время как новый процесс начинает обслуживать новые connectinos.
Есть ли какой-нибудь проверенный способ сделать это с помощью BSD-сокетов? (Бонусные баллы за решение EventMachine.)
Возможно, есть библиотеки с открытым исходным кодом, реализующие это, которые я могу использовать как есть, или использовать в качестве ссылки? (Опять же, не-Ruby и не EventMachine решения также приветствуются!)