开始学习节点集群获取错误

时间:2016-07-08 07:01:20

标签: node.js cluster-computing

我尝试将此作为我的第一个代码,我收到了错误

   const cluster = require('cluster');
    const http = require('http');
    const numCPUs = 4;

    if (cluster.isMaster) {
      // Fork workers.
      for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
      }
       cluster.on('online', function(worker) {
            console.log('Worker ' + worker.process.pid + ' is online');
        });

      cluster.on('exit', (worker, code, signal) => {
        console.log(`worker ${worker.process.pid} died`);
      });

    } else {
      // Workers can share any TCP connection
      // In this case it is an HTTP server
      http.createServer((req, res) => {
        res.writeHead(200);
        res.end('hello world\n');
      }).listen(8000);
    }

这是我得到的错误: -

工人11056在线 工人11057在线 工人11058在线 工人11059在线 events.js:141       扔掉//未处理的'错误'事件       ^

错误:绑定EADDRINUSE null:8000     at Object.exports._errnoException(util.js:870:11)     at exports._exceptionWithHostPort(util.js:893:20)     在cb(net.js:1302:16)     at rr(cluster.js:594:14)     在工人。 (cluster.js:564:9)     在过程中。 (cluster.js:714:8)     在emitTwo(events.js:92:20)     at process.emit(events.js:172:7)     在handleMessage(internal / child_process.js:689:10)     在Pipe.channel.onread(internal / child_process.js:440:11) events.js:141       扔掉//未处理的'错误'事件       ^

错误:绑定EADDRINUSE null:8000     at Object.exports._errnoException(util.js:870:11)     at exports._exceptionWithHostPort(util.js:893:20)     在cb(net.js:1302:16)     at rr(cluster.js:594:14)     在工人。 (cluster.js:564:9)     在过程中。 (cluster.js:714:8)     在emitTwo(events.js:92:20)     at process.emit(events.js:172:7)     在handleMessage(internal / child_process.js:689:10)     在Pipe.channel.onread(internal / child_process.js:440:11) events.js:141       扔掉//未处理的'错误'事件       ^

错误:绑定EADDRINUSE null:8000     at Object.exports._errnoException(util.js:870:11)     at exports._exceptionWithHostPort(util.js:893:20)     在cb(net.js:1302:16)     at rr(cluster.js:594:14)     在工人。 (cluster.js:564:9)     在过程中。 (cluster.js:714:8)     在emitTwo(events.js:92:20)     at process.emit(events.js:172:7)     在handleMessage(internal / child_process.js:689:10)     在Pipe.channel.onread(internal / child_process.js:440:11) 工人11056死了 工人11057死了 工人11058死了 events.js:141       扔掉//未处理的'错误'事件       ^

错误:绑定EADDRINUSE null:8000     at Object.exports._errnoException(util.js:870:11)     at exports._exceptionWithHostPort(util.js:893:20)     在cb(net.js:1302:16)     at rr(cluster.js:594:14)     在工人。 (cluster.js:564:9)     在过程中。 (cluster.js:714:8)     在emitTwo(events.js:92:20)     at process.emit(events.js:172:7)     在handleMessage(internal / child_process.js:689:10)     在Pipe.channel.onread(internal / child_process.js:440:11) 工人11059死了

2 个答案:

答案 0 :(得分:1)

您是在项目的其他位置启动服务器吗?

尝试将创建的新工作人员拆分到一个单独的文件中。

worker.js

import express from 'express';
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

并将服务器设置定向到此文件

setup.js

const cluster = require('cluster');
const http = require('http');
const numCPUs = 4;

cluster.setupMaster({
  exec: __dirname + '/worker.js'
});

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
     cluster.fork();
  }
  cluster.on('online', function(worker) {
     console.log('Worker ' + worker.process.pid + ' is online');
   });

  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
   });
   return 1;
}

答案 1 :(得分:0)

EADDRINUSE表示其他内容已绑定到您尝试使用的端口/ IP地址组合。

要检查的事项:

  • 您是否已将其他进程绑定到端口8000?如果是这样,也许在这里更改代码中的端口号。

  • 您是否正在运行此代码的另一个实例? (在类UNIX操作系统上,可能使用ps并使用适当的选项来查找它。)如果是,请终止另一个实例。 (在类UNIX操作系统上,您可以使用killpkill使用适当的选项。)