问题标签 [node.js-stream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
18950 浏览

node.js - 如何在 Node.js 中一次将一个可读流传输到两个可写流?

目标是:

  1. 创建文件读取流。
  2. 将其通过管道传输到 gzip ( zlib.createGzip())
  3. 然后将 zlib 输出的读取流通过管道传输到:

    1) HTTPresponse对象

    2)可写文件流来保存压缩后的输出。

现在我可以做到 3.1:

...效果很好,但我还需要将压缩后的数据保存到文件中,这样我就不需要每次都进行 regzip 并且能够直接流式传输压缩后的数据作为响应。

那么如何在 Node 中一次将一个可读流传输到两个可写流?

sourceFileStream.pipe(gzip).pipe(response).pipe(targetFileStream);可以在 Node 0.8.x 中工作吗?

0 投票
3 回答
51552 浏览

node.js - 如何将缓冲区包装为 stream2 可读流?

如何使用 stream2 接口将 node.js 缓冲区转换为可读流?

我已经找到了这个答案和 stream-buffers 模块,但是这个模块是基于 stream1 接口的。

0 投票
2 回答
11626 浏览

javascript - Node.js 网络库:从“数据”事件中获取完整数据

我四处搜寻,要么找不到我要回答的确切问题,要么我需要有人像我 5 岁那样向我解释。

基本上,我有一个使用 Net 库的 Node.js 脚本。我连接到多个主机,发送命令,监听返回数据。

数据最终被分成两个块。即使我将数据存储在哈希中,并在读取 /\r\nEND\r\n/ 分隔符时将第一部分附加到其余部分,中间也会丢失一个块。如何正确缓冲数据以确保从流中获得完整的消息?

编辑:好的,这似乎效果更好:

我最大的问题显然是逻辑错误。我要么在等待开始回复的块,要么在等待结束它的块。我没有保存中间的所有东西。

我想如果我想了解所有关于它的 Node-ish,我应该在收到完整消息时触发一个事件(以空行开头,单独一行以 'END' 结尾),并在那里进行处理。

0 投票
2 回答
15200 浏览

string - Node.js - 如何将流转换为字符串

我有流,我需要将流内容转换为字符串。我使用 http.get 从互联网流式传输。我也将流写入文件,但我不想写入文件,然后打开同一个文件并从中读取...所以我需要将流转换为字符串感谢所有建议...

0 投票
1 回答
417 浏览

node.js - node.js 中的 ForEachLine()

在slideshare上的slide no 35ppt中提到

当我运行这段代码

我得到错误

当然,我不知道我需要包含一些库,但是当我用谷歌搜索时,我什么也没找到。由于我完全是新手,所以我完全不知道如何解决它。

任何建议都将是可观的。

编辑

使用建议的答案我收到错误

谢谢

0 投票
0 回答
869 浏览

node.js - Node.JS - Server to server data transfer memory leak and slow network speeds

Ok, this is not going to be easy to explain, but I'll give it my best..

We have a file sharing solution serving (small images to big 3d drawings/videos(++5-10GB) running on a strange network setup (IT Security request).

We have the internal zone (LAN) with a NODE.js server:

  1. Backend ( Windows Server 2008 2x2.60Ghz 16GB Ram and disk transfer speed of up till 122 MB/S read). 0.8.22 (Some MSNodeSQL stuff so cant use the newer Node versions.. Converting to TDS now

We then have a external zone ( DMZ ) where the proxy and web-server lives.

  1. Proxy ( Ubuntu 12.10 1x2.60Ghz 32GB Ram rest is same as above ) node 0.8.22. Proxy is the only server that can access the LAN, but there is only one port open and it has to be initilized by the backend..
  2. Web ( Windows Server 2008 8x2.60Ghz 16GB ram and rest is same as above ) node 0.10.12

So, we need to transfer a file to the client connected to the web-server. The library I've used now is BinaryJS witch works good, but we have a extreamly slow transfer speed of about 12MB/s and this drops when new clients are connecting (usuall arround 4-6MB/s).

Request flow: - Client (browser) -> Web-Server over https

  • Web-Server -> Proxy over BinaryJS
  • Proxy -> Backend over BinaryJS CreateStream.
  • Backend -> Proxy with a stream object that are piped to the web-server socket.
  • Proxy to Web-Server via pipe ( the original request )
  • Web-Server -> Client (Browser) binaryStream.pipe(res) where res is the ExpressJS response.

From testing it seems like we loose 50% of the transfer speed for each server (backend, proxy, web) we go through and i cant figure out why.. We have enough bandwidth and disk speed to get full speed of the Gigabit connected clients. Also the memory and CPU are not working that hard.

Code: Backend (BASIC) - DB Query's of filepath etc is removed :

Proxy:

Web-Server:

I've been wondering if is should try to write my own TCP-server and clients to better fit what we are trying to do.. Unfortunate I'm quite new to Node and have not figure out how to implement the EventEmitter into TCP so I can send data with meta for identification..

Is there a better way or have I completly missunderstood the BinaryJS server?

Thanks for reading!

0 投票
2 回答
9897 浏览

node.js - 从两个管道流创建 Node.js 流

如果可能的话,我想通过管道将两个 Node.js 流合并为一个。我正在使用转换流。

换句话说,我希望我的图书馆归还myStream给人们使用。例如,他们可以写:

在内部,我正在使用第三方vendorStream来做一些工作,插入到我自己的逻辑中包含在myInternalStream. 所以上面的内容将转化为:

我可以做这样的事情吗?我试过var myStream = vendorStream.pipe(myInternalStream)了,但这显然行不通。

与 进行类比bash,假设我想编写一个程序来检查h某个流 ( tail -n 1 | grep h) 的最后一行中是否存在字母,我可以创建一个 shell 脚本:

然后如果人们这样做:

它只是工作。

这是我到目前为止所拥有的:

这是可能吗?让我知道我想要做的事情是否不清楚。

谢谢!

0 投票
1 回答
1425 浏览

node.js - 如何将 node.js 应用程序部署到 heroku?有没有可能?

问题出在 git add 上。我忘记添加 node_modules 文件。我关闭了终端并再次运行 Heroku 和 NodeJs [1] 入门中给出的命令集。应用程序已成功推送到堆栈上。

0 投票
1 回答
33829 浏览

node.js - 管道到标准输出和可写流

我正在通过双工字符串(由through提供)传输文件,并且在将信息打印到文件stdout 写入文件时遇到问题。一个或另一个工作得很好。

我假设这是因为process.stdout它是一个可写的流,但我不确定如何做我想要的(我试过传递{end: false}无济于事)。

仍在努力将我的头包裹在溪流中,如果我错过了一些明显的东西,请原谅我:)

0 投票
1 回答
8287 浏览

node.js - 单流多次消费

我想知道多个函数是否有可能在 node.js 中使用单个流。如果是的话怎么做?是否可以通过管道传输到多个目的地?

我想在两个不同的并行函数中使用流。我正在使用异步模块进行并行流程。那么可以说在每个函数中发出 pipe() 语句吗?

提前致谢。