簡體   English   中英

Node.js:通過服務器響應發送流數據(無管道)

[英]Node.js: Sending stream data over server response(without pipe)

我不想使用管道發送讀取流,而是通過將文件的多個部分作為塊發送來發送。 最終目標是通過websocket來實現,但我也想先將其付諸實踐。 我想知道如何有效地使用流數據,結束,關閉,可讀事件。 這是我的代碼。

const fs = require('fs');
const http = require('http');
const handler = (req, res) => {
  var stream = fs.createReadStream(req.url);
  stream.on('readable', () => {res.send(stream.read());});
};
const server = http.createServer(handler);
server.listen(80);

最終的目標還是要通過websocket來實現,但是問題似乎出在我處理流的方式上。

編輯 :我完成並測試了速度差異。 我得到管道:0.3秒,我的方法:0.1秒。 要測試從這些小提琴中復制JavaScript,請執行以下操作: 管道我的方法

我不想使用管道發送讀取流,而是通過將文件的多個部分作為塊發送來發送。

為什么? 當您也通過管道傳輸流時,也正是這種情況。

最終目標是通過websocket實現

為什么? 如果只需要向一個方向發送數據,則不需要WebSocket。 接收端可以使用Fetch API或類似的接口。 HTTP是功能強大的協議。 無論如何,您也可以通過管道傳輸到WebSocket流。

我想知道如何使用流數據,結束,關閉,可讀事件

您的readable很好。 現在,您所需要做的就是為end添加一個處理程序。 像這樣:

stream.on('end', () => {
  res.end();
});

如果您只是通過管道傳輸流,則此操作會自動完成。

暫無
暫無

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

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