微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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视为单独的值集.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐