群集工作人员不在debugging模式下监听

当我在debugging模式下运行这个脚本时,工作者被创build,但是他们都没有在监听,主的listening事件从不被触发,我不能做任何的HTTP请求。

当我没有debugging模式运行一切正常,所以问题不是与脚本。

 var cluster = require('cluster'), http = require('http'); if(cluster.isMaster){ cluster.fork(); cluster.fork(); cluster.on('listening', function(){ console.log('New process is listening'); }); } else{ var server = http.createServer(function(req, res){ res.end('hello'); }); server.listen(8080); } 

我的命令行参数很简单:

  • 节点–debug-brk = 59062 testCluster.js( debugging
  • 节点testCluster.js( 正常

如果有人能够指出这一点,我将不胜感激,也许自己也可以运行剧本。

问题是由于所有进程(worker和master)试图在同一个端口上侦听debugging操作而引起的。 我认为这会导致工人挂起,进程开始,但没有代码实际运行。

为了解决这个问题,我增加了每个新分叉工人的端口号。

 var debugPort = getDebugPort(), inDebugMode = !!debugPort; var workerArgv = process.execArgv.concat(); if(inDebugMode){ cluster.setupMaster({ execArgv: workerArgv }); } function fork(){ updateArgs(workerArgv, 'debug-brk', ++ debugPort); cluster.fork(); }; 

随着…

 function getDebugPort(){ var args = process.execArgv; for(var i = 0; i < args.length; i ++){ var arg = args[i]; if(arg.indexOf('--debug-brk=') == 0){ var port = parseInt(arg.replace('--debug-brk=', '')); return isNaN(port) ? null : port; } } }; function updateArgs(args, name, value){ var search = '--' + name + '='; for(var i = 0; i < args.length; i ++){ if(args[i].indexOf(search) == 0){ args[i] = search + value; return; } } }; 

我很惊讶这甚至可以在Webstormdebugging器中工作,其中每个新的工作进程都在自己的选项卡中打开,但仍然将其日志路由到主控制器的选项卡。