2017-05-31 104 views
0

而不是使用管道發送讀取流我想通過將文件的多個部分作爲塊發送來發送它。最終目標是通過websocket完成,但我也想首先解決這個問題。我想知道如何有效地使用流數據,結束,關閉,可讀的事件。這是我的代碼。Node.js:通過服務器響應(無管道)發送流數據

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:PipeMy Method

+0

我可能想要一個標題 – Rey

回答

4

而不是使用管我想通過發送文件的多個部分的塊發送它發送一個讀取流。

爲什麼?這正是您在管道流中發生的情況。

的最終目標是要在做過來的WebSocket

爲什麼?如果您只需要向一個方向發送數據,則不需要WebSocket。接收端可以使用Fetch API或類似的。 HTTP是相當有用的協議。無論如何,你也可以管道到一個WebSocket流。

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

你有readable下來就好了。現在,您只需爲end添加處理程序。像這樣:

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

如果你只是管道流,但這是爲你自動完成的。

+0

Upvote用於阻止使用WebSocket進行數據流以支持HTTP Streams。 WebSockets應該用於可序列化的數據,HTTP在處理數據流方面做得非常出色。 – peteb

+0

我希望能夠更好地處理髮送的數據。 – Rey

+0

管道速度較慢。 「 _」數據流將自動進行管理,以便目標可寫入流不會被更快的可讀流覆蓋。「_ [link](https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options) 另外使用websocket是我正在構建的應用程序的核心部分。我需要爲每個請求發送更多的文件數據。我也需要發送身份驗證。更重要的是請求方法,如http,https或websocket。我確實設置了使用http,但速度較慢。 – Rey

相關問題