我不是 node.js 大师,所以我想对此有更多的看法。
我正在创建一个 HTTP node.js Web 服务器,它不仅必须处理大量并发连接,而且还必须处理长时间运行的作业。默认情况下,node.js 在一个进程上运行,如果有一段代码需要很长时间才能执行任何后续连接,则必须等到代码结束它在前一个连接上所做的事情。
例如:
var http = require('http');
http.createServer(function (req, res) {
doSomething(); // This takes a long time to execute
// Return a response
}).listen(1337, "127.0.0.1");
所以我正在考虑使用node-webworker库在单独的线程中运行所有长时间运行的作业:
var http = require('http');
var sys = require('sys');
var Worker = require('webworker');
http.createServer(function (req, res) {
var w = new Worker('doSomething.js'); // This takes a long time to execute
// Return a response
}).listen(1337, "127.0.0.1");
为了让整个事情更高效,我还想使用集群为每个 CPU 核心创建一个新的节点进程。
通过这种方式,我希望通过不同的进程来平衡客户端连接cluster
(如果我在四核上运行它,假设是 4 个节点进程),然后在单独的线程上执行长时间运行的作业node-webworker
。
这个配置有问题吗?