不是使用管道发送读取流,而是通过以块的形式发送文件的多个部分来发送它。最终目标是通过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:Pipe与My Method
答案 0 :(得分:4)
不是使用管道发送读取流,而是通过将文件的多个部分作为块发送来发送它。
为什么呢?这正是管道流时发生的情况。
最终目标是通过websocket
进行
为什么呢?如果您只需要向一个方向发送数据,则不需要WebSocket。接收端可以使用Fetch API等。 HTTP是非常有用的协议。在任何情况下,您也可以管道到WebSocket流。
我想知道如何使用流数据,结束,关闭,可读事件
你readable
就好了。现在你需要做的就是为end
添加一个处理程序。像这样:
stream.on('end', () => {
res.end();
});
如果您只是通过管道传输,则会自动完成此操作。