У меня есть приложение на основе SailsJs (http://sailsjs.org/), которое должно иметь дело с некоторыми задачами с интенсивным использованием ЦП. Короче говоря, я хочу использовать модуль , чтобы делегировать обработку этих задач рабочим процессам, чтобы основной цикл событий приложения Sails не блокировался (и поэтому может отвечать на запросы как обычно).Использование модуля кластера узлов с SailsJs: EADDRINUSE
При создании рабочего объекта я получаю ошибку EADDRINUSE
, так как Sails пытается запустить снова и привязать к тому же порту.
Пример код:
// SomeSailsService.js
var cluster = require('cluster');
var Queue = require('bull');
var myQueue = Queue('myQueue', 'connection stuff', 'etc');
var numWorkers = 2;
var i;
if (cluster.isMaster) {
// Spawn some workers
for (i = 0; i < numWorkers; i++) {
cluster.fork();
}
} else {
// This is a worker, so bind to new job event
myQueue.process(function processJob(job, done) {
// CPU intensive shenanigans
});
}
module.exports = {
addToQueue: function(foo) {
myQueue.add({foo: foo});
}
};
При выполнении вышеизложенного, паруса приложение запускается, то при запуске два рабочих пытается запустить приложение еще два раза. Это приводит к двум из следующих ошибок:
events.js:72
throw er; // Unhandled 'error' event
^
Error: bind EADDRINUSE
at errnoException (net.js:904:11)
at net.js:1084:30
at Object.1:1 (cluster.js:594:5)
at handleResponse (cluster.js:171:41)
at respond (cluster.js:192:5)
at handleMessage (cluster.js:202:5)
at process.emit (events.js:117:20)
at handleMessage (child_process.js:322:10)
at child_process.js:396:7
at process.handleConversion.net.Native.got (child_process.js:91:7)
at process.<anonymous> (child_process.js:395:13)
at process.emit (events.js:117:20)
at handleMessage (child_process.js:322:10)
at Pipe.channel.onread (child_process.js:347:11)
Есть ли способ обойти это? Или альтернативный способ решения этой проблемы?
Похоже, вы поняли это, но если вы хотите поболтать об этом, придите пообщаться в sails.js. Комната Gitter: https://gitter.im/balderdashy/sails –