我正在尝试使用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
或其他一些自由端口?
这个主题有几个主题。例如:
但是:
cluster
变体execArgv
,cluster
似乎仍然没有记录{{1}}。答案 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
});