【发布时间】:2017-07-19 01:18:47
【问题描述】:
我在生产服务器上有一个非常非常繁忙的节点应用程序。该应用程序处理实时聊天(使用 websockets)以及电子商务支付。虽然 everything 是绝对设置的,因此当服务器关闭时,客户端将重新连接其套接字等,但我仍然有一个问题:每当服务器停止时,使用 SIGINT,事件循环就会被切断.这意味着任何挂起的数据库写入(可能用于金融交易)都将被简单地丢弃。有两个特别关键的时刻(当信用卡商给出OK,但在我们将记录写入数据库之前)和此刻我们在非高峰时间关闭它以防止任何可能的问题。但这很糟糕。
我认为这是一个解决方案:
- 我向进程发送了一个自定义 UNIX 信号(例如 SIGUSR2?);
- 当 server.js 收到信号时:
- 停止监听 80 端口
- 它等待事件循环干涸
- 如果 10 秒后仍然挂起,则强制关闭 这意味着每次重新启动时,服务器最多会停机 10 秒。
这就是现实世界中的人们所做的吗?有什么问题吗?如何检查事件循环是否为空?
【问题讨论】:
-
说真的,这是一个编程问题,我已经完成了自己的研究,提出了一个解决方案....为什么不赞成?!?
-
可悲的是,无论谁投反对票(没有评论)都会埋葬这个问题。不错。
-
您可以捕获信号并适当地处理它们(例如使用
process.on())...例如谷歌node graceful shutdown。按照惯例,SIGINT 旨在作为强制终止,SIGTERM 应处理正常关闭。
标签: node.js