如果这个问题的堆栈错误,我很抱歉。
我有一个在 Heroku 上运行的 Node.js 服务器。每当我提交某些内容时,服务器就会重新启动。我想警告用户,将会重新启动,这样我就不会完全破坏他们的体验。只是一个简单的通知,其中包含文本“服务器将在 X 分钟内重新启动”。
假设我已设置好客户端,并且只需发出 Socket.IO 即可显示通知。 我该怎么做?我想到在客户端有一些偷偷摸摸的功能,可以让服务器发出通知,但我担心它很容易被利用。
最佳答案
答案是检测SIGTERM
Heroku 发送到您的应用程序以将其关闭的信号,一旦检测到该信号,就会向每个连接的客户端发出通知:
process.on('SIGTERM', () => {
// send your signal
})
然而,更好的用户体验只是确保用户永远不知道你的服务器重新启动。对于 Node 来说这应该不难,你只需要:
- 确保您的流程快速结束和启动(很快只需几秒钟)
- 确保您的客户端都具有重新连接逻辑(这是内置于 socket.io 中的,因此您不必执行任何操作)
(可选)打开预引导,这将使一台服务器停机与另一台服务器启动之间的增量接近于零 (
heroku features:enable -a myapp preboot
)
关于服务器重启的 Node.js 和 Socket.IO 通知警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43346696/