Уведомление Node.js и Socket.IO о перезапуске сервера

Извините, если это неправильный стек для этого вопроса.

У меня есть сервер Node.js, работающий на Heroku. Всякий раз, когда я что-то фиксирую, сервер перезагружается. Я хочу предупредить пользователей о том, что будет перезапуск, чтобы я не испортил их работу полностью. Просто простое уведомление с текстом "Перезагрузка сервера через X минут".

Допустим, у меня все клиентская сторона настроена, и для вывода уведомления требуется только эмиттер Socket.IO. Как бы я это сделал? Я подумал о том, чтобы на стороне клиента была какая-то хитрая функция, которая заставляла бы сервер отправлять уведомления, но я боюсь, что это может быть легко использовано.

1 ответ

Ответ заключается в обнаружении SIGTERM Сигнал, который Heroku отправляет в ваше приложение, чтобы закрыть его, и, как только этот сигнал обнаружен, отправить уведомление каждому подключенному клиенту:

process.on('SIGTERM', () => {
  // send your signal
})

Тем не менее, лучший пользовательский опыт просто гарантирует, что пользователи даже не узнают, что ваш сервер перезагружен С узлом это не должно быть сложно, вам нужно только:

  1. Чтобы убедиться, что ваш процесс заканчивается и начинается быстро (быстро, за несколько секунд)
  2. Чтобы все ваши клиенты имели логику переподключения (это встроено в socket.io, поэтому вам не нужно ничего делать)
  3. При желании можно включить предварительную загрузку, что приведет к тому, что дельта между одним сервером, работающим на отказе, и работой на другом сервере будет близка к нулю (heroku features:enable -a myapp preboot)

Другие вопросы по тегам