node.js - 将请求传递给特定的 fork Node 实例

标签 node.js request cluster-computing

如果我错了,请纠正我,但不可能在同一端口上启动多个 http 服务器。

基于此,有趣的是 NodeJS 集群可能会 fork 。因为我知道有一个主人正在将请求传递给其中一个 fork worker 。什么worker是由操作系统管理的或者cluster.schedulingPolicy =“rr”表示“循环”。

要点是:每个工作人员都需要自己的内存,因此您需要 x 倍的内存,其中 x 是工作人员的数量

但是,如果我喜欢在 Node 应用程序之外运行不同的(子)域,我也喜欢将内存数据库的不同部分(例如简单的 JSON 文件)绑定(bind)到(子)域。或者基于 subdomain.example.tdl/resource1/whatever 等资源。

这似乎不可能。基于资源或基于域。

在我看来这应该是可能的,因为我可以通过不同的现有中间件基于请求对象(res.url)和资源(params)进行路由。

这样就可以告诉主控将请求传递给特定的 fork 实例。

最佳答案

这是可能的:您需要在master上创建网络服务器,并通过您的规则将连接传递给workers http服务器:

var cluster = require('cluster');

if (cluster.isMaster) {
    var workers = [];    

    // Create workers
    for (var i=0; i<require('os').cpus().length; i++) {
        workers[i] = cluster.fork({WORKER_INDEX:i, JSON_INDEX:i});
    }

    // Create net server at master
    var server = require('net').createServer({pauseOnConnect:true}, function(c) {
        var b = Math.floor( Math.random()*workers.length );
        workers[b].send("doit",c);
    }).listen(3000);
} else {

    // Load specific data for worker (pass parametr JSON_INDEX)
    var json = "{default:default}";   
    try {
        json = require("fs").readFileSync('./data_'+process.env.JSON_INDEX+'.json');
    } catch (e) {}

    // Create http server and pass specific json to client
    var server = require('http').createServer( function(req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end(json);
    }).listen(0,'127.0.0.1');

    // Get message from master and check if need pass to http server
    process.on('message', function(m,c) {
        if ( "doit" === m ) {
            server.emit('connection', c);
            c.resume();
        }
    });
}

关于node.js - 将请求传递给特定的 fork Node 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31339915/

相关文章:

JAVA - 简单的 GET 请求,使用 SSL 证书和 HTTPS

node.js - 使用 Node js 进行 REST 调用 : "Error: connect ETIMEDOUT" and "http code 0"

javascript - 使用 Node js 请求模块从 API 获取 JSON,无法访问子类别

jms - 代理的 activemq 静态网络是否停止转发消息而未启用advisorySupport?

cluster-computing - 如何从神经节报告中排除监控服务器?

c++ - 跟踪集群组状态 C++

javascript - 将 Typescript 绝对路径转换为 ​​NodeJS 相对路径?

node.js - 如何防止 npm 安装后出现 Webpack 错误?

node.js - 如何使用 Typescript 创建 Node.js 模块

node.js - 如何使用 Kraken.js 为 Bookshelf 配置 Knex