2017-05-31 103 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

相关问题