title: How to Use Node Cluster module within Express Generator App Skeleton
body: <p>I am trying to use the cluster module within my Express app. I used express-generator to create my application structure, but I am not sure how to incorporate the cluster module while maintaining the separation of app.js and bin/www. I have seen tutorials and github examples of using cluster with express, but none in a full application skeleton. Is there a way to maintain the separation of app.js and www while incorporating the cluster module?</p>
  
  <p>Here is my full bin/www file:</p>
  
  <pre><code>#!/usr/bin/env node
  
  /**
   * Module dependencies.
   */
  
  var app = require('../app');
  var debug = require('debug')('football:server');
  var http = require('http');
  var cluster = require('cluster');
  var numCPUs = require('os').cpus().length;
  
  /**
   * Get port from environment and store in Express.
   */
  
  var port = normalizePort(process.env.PORT || '3000');
  app.set('port', port);
  
  if(cluster.isMaster){
    // Fork workers.
    for (var i = 0; i &lt; numCPUs; i++) {
      console.log('forking process', i)
      cluster.fork();
    }
  
    // If a worker dies, log it to the console and start another worker.
    cluster.on('exit', function(worker, code, signal) {
      console.log('Worker ' + worker.process.pid + ' died.');
      cluster.fork();
    });
  
    // Log when a worker starts listening
    cluster.on('listening', function(worker, address) {
      console.log('Worker started with PID ' + worker.process.pid + '.');
    });
  }
  else{
    /**
     * Create HTTP server.
     */
     console.log('i am in the else statement')
    var server = http.createServer(app);
    console.log('created another server')
    /**
     * Listen on provided port, on all network interfaces.
     */
  
    server.listen(port);
    server.on('error', onError);
    server.on('listening', onListening);
  }
  
  /**
   * Normalize a port into a number, string, or false.
   */
  
  function normalizePort(val) {
    var port = parseInt(val, 10);
  
    if (isNaN(port)) {
      // named pipe
      return val;
    }
  
    if (port &gt;= 0) {
      // port number
      return port;
    }
  
    return false;
  }
  
  /**
   * Event listener for HTTP server "error" event.
   */
  
  function onError(error) {
    if (error.syscall !== 'listen') {
      throw error;
    }
  
    var bind = typeof port === 'string'
      ? 'Pipe ' + port
      : 'Port ' + port;
  
    // handle specific listen errors with friendly messages
    switch (error.code) {
      case 'EACCES':
        console.error(bind + ' requires elevated privileges');
        process.exit(1);
        break;
      case 'EADDRINUSE':
        console.error(bind + ' is already in use');
        process.exit(1);
        break;
      default:
        throw error;
    }
  }
  
  /**
   * Event listener for HTTP server "listening" event.
   */
  
  function onListening() {
    var addr = server.address();
    var bind = typeof addr === 'string'
      ? 'pipe ' + addr
      : 'port ' + addr.port;
    debug('Listening on ' + bind);
    console.log('yay')
  }
  </code></pre>
  
  <p>I never get the message saying that "Worker is listening with pid..." and the console.log() at the top of the else statement never gets printed.</p>