Как запускать команды, используя дочерний процесс, используя nodejs? - PullRequest
0 голосов
/ 04 февраля 2020

Я установил связь между клиентом и сервером с помощью socket.io. Теперь я отправляю команды от клиента к серверу с помощью WebSockets. Я хотел бы запустить эти полученные команды от клиента на сервере

Вот мое решение

HTML (клиент)

<html>
<body>
  I am client
</body>
<script>

const ws = new WebSocket('ws://localhost:9898/');

ws.onopen = function() {
    console.log('WebSocket Client Connected');
    ws.send('npm run build');
};

ws.onmessage = function(e) {
  console.log("Received: '" + e.data + "'");
};

</script>
</html>

Вот сервер. js

const http = require('http');
const WebSocketServer = require('websocket').server;

const server = http.createServer();
server.listen(9898);

const wsServer = new WebSocketServer({
    httpServer: server
});

wsServer.on('request', function(request) {
    const connection = request.accept(null, request.origin);

    connection.on('message', function(message) {
      console.log(message.utf8Data);
      connection.sendUTF('Hi this is WebSocket server!');
    });
    connection.on('close', function(reasonCode, description) {
        console.log('Client has disconnected.');
    });
});

Теперь, когда мы запускаем сервер и открываем индекс. html, сервер получает следующее сообщение

`npm run build`

Теперь, как мне запустить эту команду на сервере, используя дочерний процесс?

1 Ответ

1 голос
/ 04 февраля 2020

Вы можете использовать child_process , чтобы создать новый процесс для вашего сервера. js как показано ниже

const http = require('http');
const WebSocketServer = require('websocket').server;
const util = require('util');
const exec = util.promisify(require('child_process').exec);

const server = http.createServer();
server.listen(9898);

const wsServer = new WebSocketServer({
    httpServer: server
});

wsServer.on('request', function(request) {
    const connection = request.accept(null, request.origin);

    connection.on('message', function(message) {
      console.log(message.utf8Data);
      const { stdout, stderr } = await exec(message.utf8Data);
      console.log('stdout:', stdout);
      console.log('stderr:', stderr);
      connection.sendUTF('Hi this is WebSocket server!');
    });
    connection.on('close', function(reasonCode, description) {
        console.log('Client has disconnected.');
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...