jco*_*and 13 performance upload file-upload limit node.js
我如何限制node.js中服务器的上传速度?
这甚至是一种选择吗?
场景:我正在编写一些方法,允许用户自动将文件上传到我的服务器.我想将上传速度限制为(例如)50kB/s(当然可配置).
Tom*_*Tom 16
我认为您不能强制客户端以预定义的速度进行流式传输,但您可以控制整个过程的"平均速度".
var startTime = Date.now(),
totalBytes = ..., //NOTE: you need the client to give you the total amount of incoming bytes
curBytes = 0;
stream.on('data', function(chunk) { //NOTE: chunk is expected to be a buffer, if string look for different ways to get bytes written
curBytes += chunk.length;
var offsetTime = calcReqDelay(targetUploadSpeed);
if (offsetTime > 0) {
stream.pause();
setTimeout(offsetTime, stream.resume);
}
});
function calcReqDelay(targetUploadSpeed) { //speed in bytes per second
var timePassed = Date.now() - startTime;
var targetBytes = targetUploadSpeed * timePassed / 1000;
//calculate how long to wait (return minus in case we actually should be faster)
return waitTime;
}
Run Code Online (Sandbox Code Playgroud)
这当然是伪代码,但你可能得到了重点.可能还有另一种更好的方式,我不知道.在这种情况下,我希望其他人会指出它.
请注意,它也不是很精确,您可能希望使用与平均速度不同的度量标准.
使用节流模块来控制管道流速度
npm install throttle
var Throttle = require('throttle');
// create a "Throttle" instance that reads at 1 b/s
var throttle = new Throttle(1);
req.pipe(throttle).pipe(gzip).pipe(res);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5955 次 |
| 最近记录: |