我刚刚参加了NodeJS,我正在阅读利用所有CPU的核心并在所有可用资源中产生这个过程。
这似乎是一个非常有趣的主题,我现在正在测试它。但我对群集设置中的argv
对象键有疑问。
我正在使用此脚本启动服务器:
var path = require("path"),
colors = require("colors");
var cluster = require('cluster'),
os = require('os'),
cores = os.cpus();
/*
var config = require(path.join(__dirname, 'config.json'));
*/
/*
* Start Server
*/
cluster.setupMaster({
exec : path.join(__dirname, "application.js"),
args : ["--environment", "dev"]
});
if (cluster.isMaster) {
for (var i = cores.length - 1; i >= 0; i--) {
cluster.fork();
};
cluster.on("fork", function(worker) {
console.log("Worker : [ %d ][ Status : Forking ]".cyan, worker.process.pid);
});
cluster.on("online", function(worker) {
console.log("Worker : [ %d ][ Status : Online ]".green, worker.process.pid);
});
cluster.on("listening", function(worker, address) {
console.log("Worker : [ %d ][ Status : Listening ][ Address : %s ][ Port : %d ]".yellow, worker.process.pid, address.address, address.port);
});
cluster.on("disconnect", function(worker) {
console.log("Worker : [ %d ][ Status : Disconnected ]".white, worker.process.pid);
});
/*
* Restart Dead Workers
*/
cluster.on("exit", function(worker, code, signal) {
console.log("Worker : [ %d ][ Status : Exit ][ Signal : %s ][ Code : %s ]".red, worker.process.pid, signal, code);
cluster.fork();
});
} else {
};
以上是我的server.js
,正如exec
中所述,它在运行时从应用程序开始:
var express = require("express"),
http = require('http'),
path = require("path"),
optimist = require("optimist"),
colors = require("colors"),
recess = require("recess");
var application = module.exports = express(),
config = optimist.argv;
console.log(config);
var routes = require(path.join(__dirname, "routes")),
api = require(path.join(__dirname, "routes", "api"));
application.set('view engine', 'jade');
application.set('views', path.join(__dirname, 'views'));
application.configure(function(){
application.use(express.bodyParser());
application.use(express.methodOverride());
application.use("/assets", express.static(path.join(__dirname, "public")));
application.use(express.logger('dev'));
application.use(application.router);
});
application.configure('development', function(){
application.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
});
application.configure('production', function(){
application.use(express.errorHandler());
});
/*
* JSON API
*/
application.get('/api/test', api.test);
/*
* Routing
*/
application.get('/', routes.index);
application.get('/partials/:name', routes.partials);
application.get('*', routes.index);
/*
* Start Server
*/
var server = http.createServer(application).listen(process.env.PORT);
首先,我可以使用argv
将对象作为选项发送到application.js
脚本吗?如果是这样的话?如果不是,我想我现在只能发送简单的选项。
其次,最后,我正在使用语法吗?是否有必要在if(cluster.isMaster) {} else {}
中添加其他内容(如果else
中有任何需要,我最感兴趣的话)?我很抱歉,如果这个问题看起来有点愚蠢,但我几天前刚刚开始,我非常渴望了解更多有关Node的信息:))
答案 0 :(得分:1)
有两种方法可以将对象发送给孩子:
online
事件,然后使用cluster.worker[<id>].send(<object>)
发送一个对象,该对象将自动处理(反)序列化。你掌握好看。关于我可以建议的唯一改进是将您的工作人员包裹在domain
中,以便更好地处理错误。