CNode

请教如何限制stream流的速度?

问答
Hhisune发布于10 年前最后回复10 年前12 回复9280 浏览0 收藏

请教如何限制 fs.createReadStream().pipe() 和 fs.createWriteStream() 的速度?

on('data') 去计算?然后pause?有没有更好的办法呢?

查看回复

回复 (12)

A
alsotang#1·10 年前

pipe 会自动限速的

A
anotherWill#2·10 年前

setTimeout

3
359056163#3·10 年前

读取的时候,不清楚,但是写的时候有办法。 数据读取到一个buffer里,在执行写入操作的时候,一点点的写。 别用pipe. 声明一个 标记 已写入的多少长度的变量,mark 一个 每次写入多少长度的变量。limit

	var mark = 0,limit = 1024;
	writable.write(buffer.slice(mark,limit),(err)=>{
			mark+=limit;
     })
F
FoghostCn#4·10 年前

pipe 会自动调速的,不用关心

H
htoooth#5·10 年前

可以看看这个能满足你的要求:throttle

F
flamingtop#6·10 年前
H
hisune#7·10 年前
引用 alsotangpipe 会自动限速的

@alsotang 我知道他有个根据写入速度来自动调整读取速度,但是我想手动限制读取或写入速度,应用场景就是,某个用户上传或下载是通过node的stream来实现的,这个时候需要限制每个用户的上传或下载的速度。

H
hisune#8·10 年前
引用 flamingtop另一个库 https://www.npmjs.com/package/stream throttle

@flamingtop 这个库亲测可以,多谢

A
alsotang#9·10 年前
引用 hisune@alsotang 我知道他有个根据写入速度来自动调整读取速度,但是我想手动限制读取或写入速度,应用场景就是,某个用户上传或下载是通过node的stream来实现的,这个时候需要限制每个用户的...

@hisune 用 throttle 这个库的话,只能限制下载速度是吗?

如果上传的话,即使 node 限了速度,那么用户的文件还是会全速传到 nginx 吧?然后 nginx 再慢慢传给 node?

A
alsotang#11·10 年前
引用 hisune@alsotang 如果通过nginx的话,应该是上传是没法限制的

@hisune 你们的 node 直接端口对外服务?

H
hisune#12·10 年前
参与回复
登录后即可参与回复。登录