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