我正在创建http
项目,我想知道什么是非服务器文件的最佳方式?主服务器不会改变太多,而是写入server.js
文件中的所有代码,我想将它的应用程序逻辑写入其他文件中。我们每次更新这些文件时都不要重新启动服务器,我们该怎么办?我正在考虑每5分钟做一次interval
刷新文件,但是有没有更好的方法来做到这一点?在不重新启动服务器的情况下运行新的/更新的应用程序文件
例(server.js):
var http = require('http');
// Load the initial app
require('./app/main.js');
// Reload the app every 5 minutes
setInterval(function(){
delete require.cache[require.resolve('./app/main.js')];
require('./app/main.js');
}, 300000);
// Listen and handle requests
var server = http.createServer(requestHandler);
server.listen(8000);
所以,这就是我如何重新加载无需重新启动服务器应用程序的想法,但有没有更好的办法?
通常情况下,你不能用新文件替换正在运行的模块文件。通常有状态,使用中的模块句柄等等......我想可以写入一个重新加载,但是无论如何,在重新加载期间你必须暂停服务器的活动,因为它将处于部分初始化状态,直到重新加载完成。如果所有这些定制开发实际上都值得避免偶尔的服务器重启,我会感到非常惊讶。它确实会使开发复杂化。 – jfriend00
如果您想要实现超高可用性,那么通常的做法是使用负载均衡器和多个服务器进程。从负载平衡器中取出一个服务器进程,对其进行更新,重新启动,将其重新放回负载平衡器中,然后执行另一个。 – jfriend00