服务器重启的 Node.js 和 Socket.IO 通知警告

标签 node.js heroku socket.io notifications

如果这个问题的堆栈错误,我很抱歉。

我有一个在 Heroku 上运行的 Node.js 服务器。每当我提交某些内容时,服务器就会重新启动。我想警告用户,将会重新启动,这样我就不会完全破坏他们的体验。只是一个简单的通知,其中包含文本“服务器将在 X 分钟内重新启动”。

假设我已设置好客户端,并且只需发出 Socket.IO 即可显示通知。 我该怎么做?我想到在客户端有一些偷偷摸摸的功能,可以让服务器发出通知,但我担心它很容易被利用。

最佳答案

答案是检测SIGTERM Heroku 发送到您的应用程序以将其关闭的信号,一旦检测到该信号,就会向每个连接的客户端发出通知:

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

然而,更好的用户体验只是确保用户永远不知道你的服务器重新启动。对于 Node 来说这应该不难,你只需要:

  1. 确保您的流程快速结束和启动(很快只需几秒钟)
  2. 确保您的客户端都具有重新连接逻辑(这是内置于 socket.io 中的,因此您不必执行任何操作)
  3. (可选)打开预引导,这将使一台服务器停机与另一台服务器启动之间的增量接近于零 ( heroku features:enable -a myapp preboot )

关于服务器重启的 Node.js 和 Socket.IO 通知警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43346696/

相关文章:

javascript - 为什么 AsyncStorage 失去了某些值(value),但另一个却很好用?

node.js - 使用云功能在 Google Cloud pub/sub 上发布只需 3 分钟 - NodeJS

ruby-on-rails - kEND和$ end有什么区别?

java - (Node.js、socket.io)JSONObject 无法转换为 int

node.js - 实时网络应用程序 : socket. io 或托管数据/消息传递?

node.js - 如何解决 Socket.io 404(未找到)错误?

javascript - 执行 promise 后代码不会中断

mysql - 如何使用 Sequelize 查询虚拟列?

ruby-on-rails - 如何使用 Rails 应用程序在 Heroku 上正确运行 Selenium Webdriver

go - Heroku 托管应用程序上的 Webhook 未更新