Module de cluster nodejs – Erreur d'adresse en cours d'utilisation

J'ai une application express.js et il faut exécuter un sous-processus chaque fois qu'il y a une demande particulière (voici: / calcul / en temps réel). Il y aura des scripts créés par l'utilisateur pour calculer les données. Donc, j'utilise le module de cluster de nœud pour créer un groupe de travailleurs et choisir celui qui est libre d'exécuter les scripts. Mais j'ai frappé le mur lors de la création du cluster lui-même. Voici le 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); 

Voici l'erreur sur laquelle je suis confronté:

 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) 

Y at-il une solution pour ce problème s'il vous plaît? Merci d'avance

C'est l'un des cas, lorsque votre code serveur est confronté à une erreur et, en raison d'une mauvaise gestion des erreurs, nous obtenons une exception, mais le port est encore occupé. Vous devez donc effacer la demande qui a réservé ce port. Si vous utilisez linux, vous pouvez utiliser

 lsof -i :3000 

Obtenez l'identification du processus et tuez ce processus en utilisant

 kill -9 #processId 

Ensuite, redémarrez votre serveur.