2014-04-07 94 views
0

嘿傢伙我正在與此節點本的API生成,談到節點的任務轉化爲咕嚕任務

var cluster = require('cluster'); 

if (cluster.isMaster) { 

    // first set up logging for the master 
    var logger = require("./api/helpers/logging.js")(); 

    var num_cpus = require('os').cpus().length; 
    logger.debug(num_cpus + " <-- that many CPUs detected!"); 

    // create a fork for each CPU (or "thread" for Intel CPUs...) 
    for (var i = 0; i < num_cpus; i++) { 
    cluster.fork(); 
    } 

    // if one of the forks dies, spawn a replacement! 
    cluster.on('exit', function (worker, code, sig) { 
    var report = ('Worker '+worker.process.pid+' died... Creating a new one!\n'); 
    report += (' -- code: '+code+'\n'); 
    report += (' -- sig: '+sig+'\n'); 
    logger.warn(report); 
    cluster.fork(); 
    }); 

    cluster.on('uncaughtException', function(error) { 
    logger.error(error); 
    process.exit(); 
    }); 

} 
else { 

    var http = require("http"); 
    var app = require("./api/do_api.js"); 
    http.createServer(app).listen(app.get('port'), function() { 
// console.log('Express server listening on port ' + app.get('port')); 
    }); 
} 

這與node thefile.js完美運行,並根據需要生成我的終點,但我有一個問題它融入我的grunt serve如果我嘗試只是「下降」的要求()到我server.js我結束了在使用錯誤的多個地址作爲我的server.js以下

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: bind EADDRINUSE 
    at errnoException (net.js:901:11) 
    at net.js:1073:26 
    at Object.25:1 (cluster.js:587:5) 
    at handleResponse (cluster.js:171:41) 
    at respond (cluster.js:192:5) 
    at handleMessage (cluster.js:202:5) 
    at process.EventEmitter.emit (events.js:117:20) 
    at handleMessage (child_process.js:318:10) 
    at child_process.js:392:7 
    at process.handleConversion.net.Native.got (child_process.js:91:7) 
connect.multipart() will be removed in connect 3.0 
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives 
debugger listening on port 5858 
connect.limit() will be removed in connect 3.0 
debugger listening on port 5858 

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: bind EADDRINUSE 
    at errnoException (net.js:901:11) 
    at net.js:1073:26 
    at Object.23:1 (cluster.js:587:5) 
    at handleResponse (cluster.js:171:41) 
    at respond (cluster.js:192:5) 
    at handleMessage (cluster.js:202:5) 
    at process.EventEmitter.emit (events.js:117:20) 
    at handleMessage (child_process.js:318:10) 
    at child_process.js:392:7 
    at process.handleConversion.net.Native.got (child_process.js:91:7) 

內容等都是這樣的

'use strict'; 

var express = require('express'), 
    path  = require('path'), 
    fs  = require('fs'), 
    mongoose = require('mongoose'); 

/** 
* Main application file 
*/ 

// Set default node environment to development 
process.env.NODE_ENV = process.env.NODE_ENV || 'development'; 

// Application Config 
var config = require('./lib/config/config'); 

// Connect to database 
var db = mongoose.connect(config.mongo.uri, config.mongo.options); 

// Bootstrap models 
var modelsPath = path.join(__dirname, 'lib/models'); 
fs.readdirSync(modelsPath).forEach(function (file) { 
    if (/(.*)\.(js$|coffee$)/.test(file)) { 
    require(modelsPath + '/' + file); 
    } 
}); 

// Populate empty DB with sample data 
require('./lib/config/dummydata'); 

// Passport Configuration 
var passport = require('./lib/config/passport'); 

var app = express(); 

// Express settings 
require('./lib/config/express')(app); 

// Routing 
require('./lib/routes')(app); 

require('./thefile.js'); // this is the kicker file shown above 

// Start server 
app.listen(config.port, function() { 
    console.log('Express server listening on port %d in %s mode', config.port, app.get('env')); 
}); 

// Expose app 
exports = module.exports = app; 

我該如何得到這個工作?

回答

1

您在server.js和do_api.js中都使用listen。您只需要開始一次收聽請求。

你有這個錯誤,因爲你不能從多個進程監聽同一個主機和端口。即使您將重複呼叫移除到listen,但除非每個羣集都在其自己的環境中運行,否則這將不起作用:它們要麼偵聽不同主機上的相同端口,要麼偵聽同一主機上的不同端口,或者(可能是什麼你想要的),它們在一個主機/端口組合中充當單個請求監聽器的工作者。