代码之家  ›  专栏  ›  技术社区  ›  Tyler Gillies

不停点头

  •  6
  • Tyler Gillies  · 技术社区  · 16 年前

    每当nodejs服务于一个页面时,是否有一种方法可以让它重新加载?

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

    5 回复  |  直到 14 年前
        1
  •  10
  •   Bakudan Lovely    14 年前

    编辑:尝试 nodules 及其 require.reloadable() 功能。

    我以前的回答是为什么不重新加载 过程 在node.js中不适用。但我认为它仍然很重要,所以我把它留在这里。

    Node.js是 规避的IO 专门设计以避免多个线程或进程。著名的 C10k problem 询问如何同时为一万个客户服务。这就是线程不能很好地工作的地方。node.js只能用一个线程服务10000个客户机。如果每次重新启动node.js,node.js就会严重受损。

    什么? 规避的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服务器,并告诉它从开始调用内部函数 function (request, response) 每次HTTP请求出现时,服务器都会监听端口8124。这几乎立即完成,因此 console.log 之后执行。

    现在Node.js 事件循环 接管。应用程序不会结束,而是等待请求。voil_160;每个请求都用 Hello World\n .

    总之,不要重启node.js,而是让它 事件循环 决定何时必须运行代码。

        2
  •  6
  •   Tyler Gillies    15 年前

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

        3
  •  0
  •   wdavidw    15 年前

    我个人使用火花2(叉子)并将切换到 cluster 只要我有时间测试它。除此之外,这2个服务器还将监听文件更改,并在适当的时候重新加载服务器,这似乎是您要查找的内容。

        4
  •  0
  •   alessioalex    15 年前

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

        5
  •  -3
  •   Tor Valamo    16 年前

    不,node.js应该始终运行。我想你可能误解了点头的概念。为了让nodejs服务于页面,它必须是自己的服务器。一旦启动服务器实例并开始监听端口,它将一直运行,直到您关闭它。

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

    推荐文章