一旦Stdout停止发出东西,如何返回孩子过程



我必须使用节点创建tomcat服务器,这有点奇怪,但这是出于学习目的。因此,基本上,我具有使用shelljs生成服务器的功能:

function spawnTomCat() {
  return new Promise((resolve, reject) => {
    const child = shell.exec('create server', {
      async: true
    })
    child.stdout.on('data', data => {
      // this is called several times, and I want to resolve the promise in the last
      // call.
      if (lastCall()) {
        resolve(child)
      }
    })
    child.stderr.once('data', reject)
  })
}

基本上,由于它是服务器,因此child.on('close')永远不会被调用,如果我在child.stdout.on('data')回调的首次执行时调用resolve函数,则服务器将启动。我可以粘贴我尝试过的东西,但它们都没有真正起作用,但是我尝试了:

  • 使用exec-不会被解雇
  • 使用Sync-将阻止和进一步的代码执行

预先感谢您。

好的,因此您想在服务器启动和运行时解决。我实际上只有两种方法可以想到这一点。

1。让服务器告诉您。服务器在服务器认为它已经启动并运行并准备好请求时,将一些已知数据写入STDOUT(或其他通信频道(去。

2。您要对服务器进行轮询。您发送测试请求以找出何时正确响应某些简单请求。

计时器观察stdout数据中的暂停是一种黑客攻击,并且会受到各种错误的机会。

最新更新