Закрыть / убить NodeJS дочерний процесс (на котором запущен веб-сервер) после бездействия - PullRequest
0 голосов
/ 08 июля 2020

Используя дочерние процессы узла, я запускаю дочерний веб-сервер и хочу убить этот процесс, когда никто не обращается к этому серверу. Я также использую прокси-сервер, чтобы к дочернему процессу можно было получить доступ по адресу 'www.website.com/proxy/'.

Итак, мой вопрос сводится к тому, как определить использование порта или активность процесса.

Я делаю это, чтобы разместить на веб-сайте несколько проектов. Если бы эту идею можно было реализовать по-другому, я тоже рад такой помощи :)

Ниже приведена базовая c установка этой проблемы:

Родительский процесс

const express = require('express');
const exec    = require('child_process').exec;
const { createProxyMiddleware } = require('http-proxy-middleware');

const app = express();

// Run child web server & setup proxy

let child = exec( 'npm start', {cwd: './server1/'} );
app.use('/proxy/', createProxyMiddleware('/proxy/',{target:'http://localhost:4000', pathRewrite: {"^/proxy/": ""},  ws:true, changeOrigin: true}));

// Listen

const server = app.listen( 80, function(){
    let host = server.address().address;
    let port = server.address().port;
    console.log( `Listening at ${host}:${port}` );
});

Дочерний процесс (index. js запускается из 'npm start')

const express = require('express');

const app = express();

app.get('*', (req, res) => {
    res.send( `Welcome to website 1! Your are accessing this on "${req.originalUrl}"` );
});

const server = app.listen( 4000, function(){
    let host = server.address().address;
    let port = server.address().port;
    console.log( `Listening at ${host}:${port}` );
});
...