Уведомление Node.js и Socket.IO о перезапуске сервера
Извините, если это неправильный стек для этого вопроса.
У меня есть сервер Node.js, работающий на Heroku. Всякий раз, когда я что-то фиксирую, сервер перезагружается. Я хочу предупредить пользователей о том, что будет перезапуск, чтобы я не испортил их работу полностью. Просто простое уведомление с текстом "Перезагрузка сервера через X минут".
Допустим, у меня все клиентская сторона настроена, и для вывода уведомления требуется только эмиттер Socket.IO. Как бы я это сделал? Я подумал о том, чтобы на стороне клиента была какая-то хитрая функция, которая заставляла бы сервер отправлять уведомления, но я боюсь, что это может быть легко использовано.
1 ответ
Ответ заключается в обнаружении SIGTERM
Сигнал, который Heroku отправляет в ваше приложение, чтобы закрыть его, и, как только этот сигнал обнаружен, отправить уведомление каждому подключенному клиенту:
process.on('SIGTERM', () => {
// send your signal
})
Тем не менее, лучший пользовательский опыт просто гарантирует, что пользователи даже не узнают, что ваш сервер перезагружен С узлом это не должно быть сложно, вам нужно только:
- Чтобы убедиться, что ваш процесс заканчивается и начинается быстро (быстро, за несколько секунд)
- Чтобы все ваши клиенты имели логику переподключения (это встроено в socket.io, поэтому вам не нужно ничего делать)
При желании можно включить предварительную загрузку, что приведет к тому, что дельта между одним сервером, работающим на отказе, и работой на другом сервере будет близка к нулю (
heroku features:enable -a myapp preboot
)