Соединение WebSocket закрывается после вызова дочернего процесса - PullRequest
0 голосов
/ 11 октября 2018

Вот настройка: я создаю простой WebSocket Server, используя библиотеку ws.Затем я присоединяю слушателя, когда клиент отправляет мне URL-адрес PDF-файла для преобразования.Я загружаю его локально, затем вызываю другую команду для его преобразования:

const download = require("download");
wss.on("connection", ws => {
  ws.onmessage = async msg => {
    await download(msg.data, destination, {
      filename: fileName
    });

    transformPDF(ws, msg.data);
  };

  // ...
});

После этого функция transformPDF вызывает команду spawn для выполнения двоичного файла командной строки.Я анализирую процент, сделанный с stdout, и затем пытаюсь передать его клиенту.Но даже до этого соединение было закрыто, и я не уверен, почему:

const { spawn } = require("child_process");
const transformPDF = (ws, url) => {
  // ...
  const child = spawn("k2pdfopt", settings);

  child.stdout.on("data", data => {
    // ...
    ws.send(percentageDone); // <--- connection is broken before this is called
  });
};

Я пытался сделать функцию transformPDF обещанием, а затем ожидал его.Я также попытался добавить опциональную опцию detached в процесс порождения.Я не совсем уверен, почему он закрывается, так как я также успешно заменил команду k2pdfopt чем-то вроде длинной find, и это сработало просто отлично (хотя перед вызовом * все пакеты данных в stdout все-таки пакетировались1010 *).

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

1 Ответ

0 голосов
/ 12 октября 2018

Оказывается, что когда я создавал дочерний процесс, он сбрасывал расширение живого сервера кода Visual Studio, которое у меня работало с index.html.Это объясняет, почему я также получаю код состояния 1001, который, как я выяснил, скорее всего, означает, что клиент обновился.

Я исправил проблему, просто установив live-сервер пакета узла и запустив свой index.html издругой терминал.

...