async run(service, opt = {}) {
const crossConf = getConfig().cross;
const defaultOpt = crossConf[service] || {};
const targetConf = extend(true, {}, defaultOpt, opt);
if (Object.keys(targetConf).length == 0) {
throw new Error([ee-core] [cross] The service [${service}] config does not exit);
}
// format params
let tmpArgs = targetConf.args;
let confPort = parseInt(getValueFromArgv(tmpArgs, 'port'));
logger.info(`targetConf: ${targetConf}, port: ${confPort}`);
// 某些程序给它传入不存在的参数时会报错
if (isNaN(confPort) && targetConf.port > 0) {
confPort = targetConf.port;
}
if (confPort > 0) {
// 动态生成port,传入的端口必须为int
confPort = await getPort({ port: confPort });
// 替换port
targetConf.args = replaceArgsValue(tmpArgs, "port", String(confPort));
}
// 创建进程
const subProcess = new CrossProcess(this, { targetConf, port: confPort });
let uniqueName = targetConf.name;
if (this.childrenMap.hasOwnProperty(uniqueName)) {
uniqueName = uniqueName + "-" + String(subProcess.pid);
}
this.childrenMap[uniqueName] = subProcess.pid;
subProcess.name = uniqueName;
this.children[subProcess.pid] = {
name: uniqueName,
entity: subProcess
};
return subProcess;
}
这句代码// 替换port
targetConf.args = replaceArgsValue(tmpArgs, "port", String(confPort));
这个函数replaceArgsValue需要优化,if (item.startsWith('port=')) { // 才替换},不然所有参数中带port的都会被影响到
async run(service, opt = {}) {
const crossConf = getConfig().cross;
const defaultOpt = crossConf[service] || {};
const targetConf = extend(true, {}, defaultOpt, opt);
if (Object.keys(targetConf).length == 0) {
throw new Error(
[ee-core] [cross] The service [${service}] config does not exit);}
}
这句代码// 替换port
targetConf.args = replaceArgsValue(tmpArgs, "port", String(confPort));
这个函数replaceArgsValue需要优化,if (item.startsWith('port=')) { // 才替换},不然所有参数中带port的都会被影响到