请教如何限制stream流的速度?
发布于 8 年前 作者 hisune 7255 次浏览 来自 问答

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

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

12 回复

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

	var mark = 0,limit = 1024;
	writable.write(buffer.slice(mark,limit),(err)=>{
			mark+=limit;
     })

pipe 会自动限速的

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

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

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

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

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

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

@alsotang 如果通过nginx的话,应该是上传是没法限制的

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

@alsotang 某些服务是

回到顶部