单个Dyno的Heroku上的Node.js子进程

请原谅我的无知,我目前正在学习如何使用来自PHP背景的Node,我真的没有与Apache或服务器管理进行交互。 我正在使用Heroku托管我的Node项目,直接从Cloud9 IDE推送。

根据我所读到的,Heroku dyno是一个单一的web进程,购买额外的dynos将允许你处理更多的流量进来,因为通过增加dynos你增加了可以处理的请求数量的大小时间。

我知道Node是一个单线程系统,可以逐个处理请求,允许您为可能需要一些时间处理的任何事情(如数据库请求,处理文件等)生成子进程。

那么,如果我用一个dyno产生一个子进程,Heroku会发生什么? 这不需要另一个测功机吗? 当然,如果Node运行单个进程,并且我的单个测试程序中只有一个进程可用,那么任何额外进程都必须由该进程处理?

或者我有这个错误?


你对exec的理解大致是正确的,我担心你在不需要的时候使用它......在你的问题中,你只提到I / O类型的操作,哪个节点在它的单线程事件中非常有效地处理做事的模式。 尽管是单线程的,但事件模型允许代码在不阻塞主事件循环的情况下运行(除非您正在执行非常CPU密集的操作,其中不包括数据库请求和文件处理)。不需要启动额外的测功机来做你想做的事情。

将测功机视为单处理器计算机。 无论您在具有单个处理器的机器上做什么,都可以在您的测功机上完成,无需额外费用或创建测功机。 尽管如此,测功机确实具有比单核处理器计算机可以利用的少得多的内存。 所以,你希望产生的任何子进程都不需要另外的运行。 您希望运行的每个主流程都需要自己的dyno。

var http = require('http');

http.createServer(function (req, res) {

    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('An amount of data that will take 1 second to send');//This will not block the event loop
}).listen(1337, '127.0.0.1');

var http = require('http');
http.createServer(function (req, res) {

    while(true) {
         break after 1 second; //this will block the event loop for 1 second
    }

    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello Worldn');
}).listen(1337, '127.0.0.1');

考虑上面代码中的两台服务器。 两台服务器都有大约一秒钟的工作要做。 第一个示例可以每秒处理数千个请求,第二个示例仅为1.发送数据,数据库请求,服务器请求,文件IO等......都将作为第一个示例运行... Node中的很少几件事情的行为第二个例子。 如果你有一些符合第二个例子的东西,那么你最好选择一种不同的语言,而不是试图强制节点为一个用例设计的用例。

链接地址: http://www.djcxy.com/p/52603.html

上一篇: Node.js child processes on Heroku with single Dyno

下一篇: Enabling HTTPS on express.js