gpt4 book ai didi

node.js - 如何派生子进程监听与父进程不同的调试端口

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:26 24 4
gpt4 key购买 nike

我正在尝试使用 child_process.fork 生成一个中断并监听 V8 调试协议(protocol)的进程。

但是,我无法让 fork 进程监听与父进程不同的端口。假设父进程监听 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, args, {env: env})
.on('message', callback)

如您所见,我试图让 fork 进程监听端口 6001,但子进程尝试监听端口 6000,它位于由 parent 使用。

如何让子进程在端口 6001 或其他空闲端口上监听?

关于这个主题有几个线程。例如:

但是:

最佳答案

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

只需将 --debug-brk 移动到 options 参数的 execArgv 键到 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 是传递给 Node 进程的参数数组。 argv 是传递给主模块的集合。 child_process.fork 有一个用于argv 的专用参数,但是execArgv 必须放在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 始终将 execArgvargv 视为单独的值集。

关于node.js - 如何派生子进程监听与父进程不同的调试端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19252310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com