nodejs cluster module - Address in use error

旧街凉风 提交于 2019-12-13 13:14:42

问题


I have an express.js application and it has to run a sub-process everytime there is a particular request (here it is : /compute/real-time ). There will be user-created scripts to compute the data. So, I am using node cluster module to create a pool of workers and pick the one which is free to execute the scripts. But I have hit the wall during the creation of cluster itself. Here is the code clusterPool.js

var cluster = require('cluster');
exports.setupCluster = function(){
console.log ("Setting up cluster for bot processing " )
  if (cluster.isMaster){
    cluster.fork();   //one is good enough at the moment
  }
}

compute.js

var async = require('async');
var clusterPool = require('.././clusterPool')
//Start the cluster
clusterPool.setupCluster();
exports.computeRealTime = function(req,res){
    clusterPool.cluster.on("listening",function(worker){
        //....Do something with the worker
    })
}

webserver.js

// Include Express
var express = require('express');
var compute = require('.././compute');

// Create a new Express application
var app = express();

// Add a basic route – index page
app.get('/compute/real-time',compute.computeRealTime);

// Bind to a port
app.listen(3000);

Here is the error I am facing :

error:  code=EADDRINUSE, errno=EADDRINUSE, syscall=bind
error: Error: bind EADDRINUSE
at errnoException (net.js:884:11)
at net.js:1056:26
at Object.1:2 (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)

IS there any way out for this problem please? Thanks in advance


回答1:


This is one of the cases, when your server code faces an error and due to improper error handling, we get exception but the port is still busy. So you need to clear out the application which has reserved that port. If you are using linux, you can use

lsof -i :3000

Get the process id and kill that process using

kill -9 #processId

Then restart your server.



来源:https://stackoverflow.com/questions/21511109/nodejs-cluster-module-address-in-use-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!