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

我正在尝试使用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视为单独的值集.

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...