我正在尝试使用child_process.fork来生成一个打破和监听V8调试协议的进程.
但是,我无法让分叉进程监听与父进程不同的端口.假设父进程侦听6000,子进程也尝试侦听端口6000:
Failed to open socket on port 6000,waiting 1000 ms before retrying
这是我的代码:
// `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,{env: env}) .on('message',callback)
正如您所看到的,我正在尝试让分叉进程侦听端口6001,但子进程尝试侦听父进程正在使用的端口6000.
如何让子进程侦听端口6001或其他一些自由端口?
> How to debug Node.JS child forked process?
> Debugging Node.js processes with cluster.fork()
然而:
>这些线程处理分叉的群集变体
>请参阅execArgv,它出现在have been undocumented for process
中,并且仍然没有为集群记录.
解决方法
简单的答案,在
this comment上找到并在Freenode的#Node.js的帮助下:
只需将–debug-brk移动到选项参数的execArgv键中即可:
// Excerpt: args = [ '127.0.0.1','api-testing' ] env = { 'DB_URI': 'mongodb://localhost/test' } child = fork(nodeModule,{ env: env,execArgv: ['--debug-brk=6001'] }) .on('message',this.callback)
execArgv是传递给节点进程的参数数组. argv是传递给主模块的集合.对于argv,child_process.fork有一个专用参数,但execArgvs必须放在opts参数中.这是有效的,在子进程中我们有:
> 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"]
综上所述
Node.js始终将execArgv和argv视为单独的值集.