如何分叉侦听与父节点不同的调试端口的子进程

时间:2013-10-08 15:44:20

标签: node.js

我正在尝试使用child_process.fork来生成一个打破并监听V8调试协议的进程。

但是,我无法让分叉进程监听与父进程不同的端口。假设父进程侦听6000,子进程也会尝试侦听端口6000

  

无法在端口6000上打开套接字,等待重试前的1000毫秒

这是我的代码:

// `test.js`, invoked as `node --debug-brk=6000 test.js`

var nodeModule, args, env, child

nodeModule = path.normalize(path.join(__dirname, '..', 'app.js'))

args = [
    '--debug-brk=6001'
  , '127.0.0.1'
  , 3030
  , 'api-testing'
]

env = { 'DB_URI': 'mongodb://localhost/test' }

child = require('child_process')
  .fork(nodeModule, args, {env: env})
  .on('message', callback)

正如您所看到的,我正在尝试让分叉进程侦听端口6001,但子进程尝试侦听父进程正在使用的端口6000

如何让子进程侦听端口6001或其他一些自由端口?

这个主题有几个主题。例如:

但是:

  • 这些主题涉及forking的cluster变体
  • 请参阅execArgvcluster似乎仍然没有记录{{1}}。

2 个答案:

答案 0 :(得分:10)

this comment上找到了足够简单的答案,并在Freenode的#Node.js的帮助下找到了答案:

--debug-brk移至execArgv param的options键移至fork

// Excerpt:

args = [
   '127.0.0.1'
  , 3030
  , 'api-testing'
]

env = { 'DB_URI': 'mongodb://localhost/test' }

child = fork(nodeModule, args, {
    env: env
  , execArgv: ['--debug-brk=6001']
})
  .on('message', this.callback)

execArgv是传递给节点进程的参数数组。 argv是传递给主模块的集合。 child_process.fork的{​​{1}}有一个专用参数,但argv必须放在execArgv参数中。这是有效的,在子进程中我们有:

opts

总结

Node.js始终将> process.execArgv ["--debug-brk=6001"] > process.argv ["/usr/local/Cellar/node/0.10.13/bin/node" "/Users/dmitry/dev/linksmotif/app.js", "127.0.0.1", "3030", "api-testing"] execArgv视为不同的值集。

答案 1 :(得分:0)

在fork之前删除旧的dad: car1: model: [toyota-venza] awd: true option: nav: backup_camera: true version: 1.35 mileage: 54,025 year: 2000 car2: model: [toyota-camry] awd: false option: nav: backup_camera: false version: [] mileage: 20,241 year: 2013 参数:

debug-brk

并添加一个新的:

process.execArgv = process.execArgv.filter(function(o){ 
    var x = "--debug-brk"; 
    return o.substring(0, x.length) !== x
});