不停歇的nodejs

Posted

技术标签:

【中文标题】不停歇的nodejs【英文标题】:nodejs without stopping 【发布时间】:2011-03-23 21:43:16 【问题描述】:

有没有办法让 nodejs 在每次提供页面时都重新加载?

我想在开发周期中执行此操作,这样我就可以避免每次代码更改时都必须关闭和启动?

【问题讨论】:

您的意思是在开发周期中热重载编辑过的源代码,而不是重载整个过程。 这是否符合您的要求? phpasptutorialize.wordpress.com/2010/09/14/… 虽然这可能无法回答您的问题,但它确实解释了 Node.js 的核心概念并提供了您需要的模块:devthought.com/2012/01/29/staying-up-with-node-js 【参考方案1】:

没有。 Node.js 应该始终运行。我想你可能误解了 nodejs 的概念。为了让 nodejs 服务页面,它必须是自己的服务器。一旦你启动一个服务器实例并开始监听端口,它就会一直运行直到你关闭它。

您是否可能调用了一个函数来关闭服务器而不是仅仅关闭给定的流?

【讨论】:

我希望整个过程在每次请求时自行重启。 sinatra 的霰弹枪可以做到这一点ruby.about.com/od/sinatra/a/sinatra5.htm 如果您也告诉我们您想要这个的原因会有所帮助。我认为没有实际用途。 没有办法。很高兴你没有使用 C 之类的东西,每次进行更改时都必须编译你的应用程序。 @TorValamo 在这些 cmets 中并不是一个真正有用的态度。如果您阅读有关霰弹枪的信息(第一条评论中提供了链接),那么实际用途非常明显。说“没有办法解决”也是完全错误的,因为这里的其他几个答案实际上提供了问题的解决方案。 @Jakob - 你可能还注意到这篇文章是一年前的,当时 node 不是 PHP。我已经好几个月没有编程了,所以我不知道 Node 现在在哪里。但是你必须从它发布时的角度来看它......【参考方案2】:

编辑:试试nodules 和他们的require.reloadable() 函数。

我之前的回答是关于为什么不重新加载 Node.js 的进程,在这里并不真正适用。但我认为它仍然很重要,所以我把它放在这里。

Node.js 是事件 IO,专门用于避免多线程或进程。著名的C10k problem 询问如何同时为10,000 个客户提供服务。这是线程不能很好地工作的地方。 Node.js 可以只用一个线程服务 10,000 个客户端。如果你每次都重新启动 Node.js,你会严重削弱 Node.js。

evented IO是什么意思?

以您为例:提供页面。每次 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 的答复。

总而言之,不要重新启动 Node.js,而是让其事件循环决定何时必须运行您的代码。

【讨论】:

它不是用于生产的,它是用于开发的,所以我在编辑代码时不必重新启动 ***.com/questions/1972242/… 但是:Node 仍然处于最前沿,从那时起发生了很多变化。【参考方案3】:

我个人使用 spark2(fork),一旦有时间测试它就会切换到cluster。除其他外,这 2 个将侦听文件更改并在适当时重新加载服务器,这似乎是您正在寻找的。​​p>

【讨论】:

【参考方案4】:

找到了 Nodemon,正是我想要的:https://github.com/remy/nodemon

【讨论】:

【参考方案5】:

有很多应用程序可以做到这一点,但我认为最好的是Cluster,因为您的服务器停机时间为 0。您还可以使用它设置多个工作人员或使用 cli REPL 功能手动启动/停止/重新启动/显示统计信息。

【讨论】:

以上是关于不停歇的nodejs的主要内容,如果未能解决你的问题,请参考以下文章

炼金术: 简约而不简单,永不停歇的测试 -- always_run

假设双休日退步0.5%,工作日要进步多少才能达到每天进步1%不停歇的进步水平。请列出程序和执行结果?

精彩CS:GO赛事不停歇,火猫直播邀你一次看个够!

要拼尽全力,也要驻足停歇

炽灯无尘

第一章:node.js简述