请教如何限制stream流的速度?
请教如何限制 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;
})
setTimeout
pipe 会自动限速的
pipe
会自动调速的,不用关心
可以看看这个能满足你的要求:throttle
@alsotang 我知道他有个根据写入速度来自动调整读取速度,但是我想手动限制读取或写入速度,应用场景就是,某个用户上传或下载是通过node的stream来实现的,这个时候需要限制每个用户的上传或下载的速度。
@flamingtop 这个库亲测可以,多谢
@hisune 用 throttle 这个库的话,只能限制下载速度是吗?
如果上传的话,即使 node 限了速度,那么用户的文件还是会全速传到 nginx 吧?然后 nginx 再慢慢传给 node?
@alsotang 如果通过nginx的话,应该是上传是没法限制的
@hisune 你们的 node 直接端口对外服务?
@alsotang 某些服务是