Я не думаю, что вы можете заставить клиента выполнять потоковую передачу с заранее определенной скоростью, однако вы можете контролировать «среднюю скорость» всего процесса.
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;
}
Это, конечно, псевдокод, но вы, вероятно, поняли смысл. Может быть другой и лучший путь, о котором я не знаю. В таком случае, я надеюсь, что кто-то еще укажет на это.
Обратите внимание, что он также не очень точный, и вы можете захотеть использовать метрику, отличную от средней скорости.