有没有办法让nodejs每次为页面服务时重新加载?
我想在开发周期中这样做,这样我就可以避免关机了;启动每个代码更改?
答案 0 :(得分:10)
修改:点击nodules及其require.reloadable()
功能。
我之前的回答是关于为什么不重新加载Node.js的进程,并且在这里并不真正适用。但我认为这仍然很重要,所以我把它放在这里。
Node.js是事件IO ,专门为避免多个线程或进程而精心设计。着名的C10k problem询问如何同时为1万名客户服务。这是线程不能很好地工作的地方。 Node.js只能为一个线程服务1万个客户端。如果您每次严重削弱Node.js时重新启动Node.js。
举个例子:提供一个页面。每次Node.js即将为页面提供服务时,事件循环都会调用回调。 事件循环是每个Node.js应用程序固有的,并在初始化完成后开始运行。服务器端的Node.js与浏览器中的客户端Javascript完全相同。每当发生事件(鼠标点击,超时等)时,都会调用回调 - 事件处理程序。
在服务器端?我们来看一个简单的HTTP服务器(源代码示例取自Node.js documentation)
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
首先加载http模块,然后创建一个HTTP服务器并告诉它每次HTTP请求进入时都以function (request, response)
开始调用内部函数,然后让服务器监听端口8124。立即执行console.log
之后。
现在Node.js 事件循环接管。应用程序不会结束,而是等待请求。并且每个请求都以Hello World\n
回答。
答案 1 :(得分:6)
找到Nodemon,正是我想要的:https://github.com/remy/nodemon
答案 2 :(得分:0)
我个人使用spark2(fork),一旦找到测试它就会切换到cluster。除此之外,那些2将监听文件更改并在适当时重新加载服务器,这似乎是您正在寻找的。 p>
答案 3 :(得分:0)
有很多应用程序可以执行此操作,但我认为最好的是Cluster,因为您的服务器停机时间为0。您还可以使用它设置多个工作人员,或使用cli REPL功能手动启动/停止/重启/显示统计数据。
答案 4 :(得分:-3)
没有。 Node.js应该始终运行。我想你可能误解了nodejs的概念。为了让nodejs为页面提供服务,它必须是自己的服务器。一旦启动服务器实例并开始侦听端口,它将一直运行直到您关闭它。
您是否可能调用函数来关闭服务器而不是仅关闭给定的流?