NodeJS Сбой кластеризации - PullRequest
       4

NodeJS Сбой кластеризации

0 голосов
/ 23 января 2020

У меня проблема с медленными функциями в nodejs.

Я хочу кластеризовать ее для повышения производительности. но мое приложение. js и сервер. js находятся в двух разных файлах.

Вот мое приложение. js

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const cron = require('cron');
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
const os = require("os")
var helmet = require('helmet');
const clusterWorkerSize = os.cpus().length


const path = require('path');

mongoose.set('useCreateIndex', true);
mongoose.connect('mongodb://127.0.0.1/db', {useNewUrlParser: true, useUnifiedTopology: true })

  .then(() => {
    console.log('Successfully connected to MongoDB!');
  })
  .catch((error) => {
    console.log('Unable to connect to MongoDB! ');
    console.error(error);
  });

if (clusterWorkerSize > 1) {
  if (cluster.isMaster) {
    for (let i=0; i < clusterWorkerSize; i++) {
      cluster.fork()
    }

    cluster.on("exit", function(worker) {
      console.log("Worker", worker.id, " has exitted.")
    })
  }
}
const app = express();

app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');

    next();
  });
app.use(bodyParser.json());
//app.use(bodyParser.urlencoded({ extended: true }))
app.use(helmet());

module.exports = app;

и теперь мой сервер. js

const http = require('http');
const app = require('./app');


const normalizePort = val => {
  const port = parseInt(val, 10);

  if (isNaN(port)) {
    return val;
  }
  if (port >= 0) {
    return port;
  }
  return false;
};
const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

const errorHandler = error => {
  if (error.syscall !== 'listen') {
    throw error;
  }
  const address = server.address();
  const bind = typeof address === 'string' ? 'pipe ' + address : 'port: ' + port;
  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;
  }
};

const server = http.createServer(app);

server.on('error', errorHandler);
server.on('listening', () => {
  const address = server.address();
  const bind = typeof address === 'string' ? 'pipe ' + address : 'port ' + port;
  console.log('Listening on ' + bind);
});

server.listen(port);

Когда я делаю сервер nodemon.

У меня ошибка с: EADDRINUSE ': console.error (bind +' уже используется. ');

Кто-нибудь может помочь мне заставить работать несколько компьютеров?

Спасибо за помощь!

...