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

Node.js和Socket.IO服务器重启通知警告,node.js,heroku,socket.io,notifications,Node.js,Heroku,Socket.io,Notifications,如果这是这个问题的错误堆栈,我很抱歉 我有一个Node.js服务器在Heroku上运行。每当我提交某些内容时,服务器就会重新启动。我想提醒用户,将会有一个重启,这样我就不会完全破坏他们的体验。只需一个简单的通知,文本为“服务器在X分钟内重新启动” 假设我已经设置好客户端,显示通知只需要一个Socket.IO emit我该怎么做呢?我想在客户端有一些隐蔽的功能,可以让服务器发出通知,但我担心它很容易被利用。答案是检测Heroku发送给你的应用程序关闭的SIGTERM信号,一旦检测到该信号,要向每个

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

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


假设我已经设置好客户端,显示通知只需要一个Socket.IO emit我该怎么做呢?我想在客户端有一些隐蔽的功能,可以让服务器发出通知,但我担心它很容易被利用。

答案是检测Heroku发送给你的应用程序关闭的
SIGTERM
信号,一旦检测到该信号,要向每个连接的客户端发出通知,请执行以下操作:

process.on('SIGTERM', () => {
  // send your signal
})
但是,更好的用户体验只是确保用户永远不会知道服务器已重新启动。对于node,这应该不难,您只需要:

  • 确保您的流程快速结束和启动(仅几秒钟)
  • 确保您的客户端都具有重新连接逻辑(这是内置在socket.io中的,因此您不必做任何事情)
  • (可选)打开预引导,这将使一台服务器停机和另一台服务器停机之间的增量接近于零(
    heroku功能:启用-a myapp预引导


  • 您是否有某种身份验证和授权?当然,您可以限制非管理员的管理功能clients@cubrr不,我没有。如果功能需要我在服务器上检查的密码,那就足够了吗?我同意,但我没有重新连接逻辑,我相信我无法实现它,因为服务器上的数据对用户来说是必不可少的,并且正在实时更改(这是一个游戏),当服务器重新启动时,这些数据就消失了。另外,我想提前几分钟而不是几秒钟提醒用户重启。有没有一个简单的方法?不过,我很感激你的回答!尝试使用Redis之类的工具来保存一些数据,最终会丢失一些数据。您可以重新连接到回退服务器,直到主服务器启动并稳定。客户端应处理到回退服务器而不是服务器的重新连接。主服务器应该只是喊“嘿,我要关机了”。在游戏架构中,游戏的每个组件(地图、聊天等)都有不同的服务器,无法提前几分钟通知用户重启。我认为,只要您在服务器进程本身中保持状态(而不是在某种存储中,如redis),您就不可能想做什么。