单个Dyno上的Heroku上的Node.jssubprocess

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

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

我知道Node是一个单线程系统,逐个处理请求,允许你为需要处理的东西(比如数据库请求,处理文件等)产生subprocess。

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

或者我有这个错误?

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

将测功机想象成单处理器计算机。 无论你在一台只有一个处理器的机器上做什么,都可以在你的测功机上完成,不需要额外的费用或创build的dynos。 尽pipe如此,测功机确实具有比单核处理器计算机可以利用的更less的内存。 所以,你希望产生的任何subprocess不需要另外运行一个dyno。 您希望运行的每个主stream程都需要自己的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 World\n'); }).listen(1337, '127.0.0.1'); 

考虑上面代码中的两台服务器。 两台服务器都有大约一秒的工作要做。 第一个例子可以每秒处理数千个请求,第二个例子只处理1.发送数据,数据库请求,服务器请求,文件IO等…都将作为第一个例子… Node中的东西很less第二个例子。 如果你有一些符合第二个例子的东西,那么你最好select一种不同的语言,而不是强迫节点为一个用例devise的用例。