簡體   English   中英

WebSocket連接在調用子進程后關閉

[英]WebSocket connection closes after calling child process

設置如下:我使用ws庫創建簡單的WebSocket服務器。 然后,當客戶端向我發送要轉換的PDF的URL時,我將附加一個偵聽器。 我在本地下載它,然后調用另一個命令對其進行轉換:

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命令執行命令行二進制文件。 我解析從標准輸出中完成的百分比,然后嘗試將其發送給客戶端。 但是即使在此之前,連接也已經關閉,我不確定為什么:

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 ,並且效果很好(盡管它確實在調用ws.send之前批處理了stdout中的所有數據)。

感謝您提供任何有關其關閉原因的幫助或見解。

事實證明,當我創建一個子進程時,它正在重置運行index.html的Visual Studio Code活動服務器擴展。 這就解釋了為什么我也得到1001狀態代碼的原因,我發現這很可能意味着客戶端已刷新。

我通過簡單地安裝節點程序包live-server並從其他終端運行我的index.html來解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM