Вот настройка: я создаю простой 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 *).
Любая помощь или понимание того, почему он закрывается, высоко ценится.