将请求传递给特定的分叉节点实例
Pass request to specific forked node instance
如果我错了请纠正我,但不可能在同一个端口上启动多个 http 服务器。
基于此,有趣的是 NodeJS 集群可能会分叉。因为我知道有主人将请求传递给其中一名分叉工人。什么工人由操作系统或 cluster.schedulingPolicy= "rr" for "round robin".
管理
重点是:每个工人都需要自己的内存,所以你需要 x 倍的内存,其中 x 是工人的数量。
但是如果我喜欢 运行 我的节点应用程序中的不同(子)域,我也喜欢保存 in_memory 数据库的不同部分(例如一个简单的 JSON文件)绑定到(子)域。或基于 subdomain.example.tdl/resource1/whatever
.
等资源
没有接缝是可能的。基于资源或基于域。
在我看来这应该是可能的,因为我可以通过不同的现有中间件基于请求对象(res.url)和资源(参数)进行路由。
这样就可以告诉主控将请求传递给特定的分叉实例。
有可能:您需要在主服务器上创建网络服务器,并通过您的规则将连接传递给工作服务器 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();
}
});
}
如果我错了请纠正我,但不可能在同一个端口上启动多个 http 服务器。
基于此,有趣的是 NodeJS 集群可能会分叉。因为我知道有主人将请求传递给其中一名分叉工人。什么工人由操作系统或 cluster.schedulingPolicy= "rr" for "round robin".
管理重点是:每个工人都需要自己的内存,所以你需要 x 倍的内存,其中 x 是工人的数量。
但是如果我喜欢 运行 我的节点应用程序中的不同(子)域,我也喜欢保存 in_memory 数据库的不同部分(例如一个简单的 JSON文件)绑定到(子)域。或基于 subdomain.example.tdl/resource1/whatever
.
没有接缝是可能的。基于资源或基于域。
在我看来这应该是可能的,因为我可以通过不同的现有中间件基于请求对象(res.url)和资源(参数)进行路由。
这样就可以告诉主控将请求传递给特定的分叉实例。
有可能:您需要在主服务器上创建网络服务器,并通过您的规则将连接传递给工作服务器 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();
}
});
}