也就是说这段代码会一直执行下去

看来得不中断已有连接的情况下进行重启才行,不能简单的stop后start,得平滑重启。大致就是让父进程启动一个子进程去监听新的连接,自己不再监听新的连接,遴选公务员而是在处理完已有连接后终止,之后子进程独挑大梁。随后发现github上的endless挺满足需求,它是一个不停机重启的服务器实现,实现流程为:

监听 SIGHUP 信号收到信号后 fork 子进程(使用相同的启动命令),将服务监听的 socket 文件描述符传递给子进程子进程启动成功后开始监听新的连接,并发送 SIGTERM 信号给父进程父进程收到 SIGTERM 信号后停止接收新的连接,等待旧连接处理完成后终止;

最后抛出错误:RangeError:遴选公务员超出最大调用堆栈大小,因此,具有停止递归的基线条件非常重要。

Tip:es6 有尾调用优化,也就是说这段代码会一直执行下去。查看 兼容表 你会发现绝大多数浏览器都不支持尾调用(proper tail calls (tail call optimisation)),故不在展开。http://lx.gongxuanwang.com/ss...

你可能感兴趣的