Node.js:通过服务器响应发送流数据(不带管道)

时间:2017-05-31 16:22:11

标签: javascript node.js server stream

不是使用管道发送读取流,而是通过以块的形式发送文件的多个部分来发送它。最终目标是通过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:PipeMy Method

1 个答案:

答案 0 :(得分:4)

  

不是使用管道发送读取流,而是通过将文件的多个部分作为块发送来发送它。

为什么呢?这正是管道流时发生的情况。

  

最终目标是通过websocket

进行

为什么呢?如果您只需要向一个方向发送数据,则不需要WebSocket。接收端可以使用Fetch API等。 HTTP是非常有用的协议。在任何情况下,您也可以管道到WebSocket流。

  

我想知道如何使用流数据,结束,关闭,可读事件

readable就好了。现在你需要做的就是为end添加一个处理程序。像这样:

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

如果您只是通过管道传输,则会自动完成此操作。