Skip to content

cross服务源码 #192

Description

@EkkoCrystal

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的都会被影响到

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions