Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
stream-throttle
Advanced tools
The stream-throttle npm package is used to throttle the rate of data flowing through a stream. This can be useful in various scenarios such as limiting the bandwidth usage, controlling the rate of data processing, or simulating network conditions.
Throttle Read Stream
This feature allows you to throttle the read stream to a specified rate. In this example, the data from 'input.txt' is read at a rate of 1 KB per second and written to 'output.txt'.
const fs = require('fs');
const { Throttle } = require('stream-throttle');
const readStream = fs.createReadStream('input.txt');
const throttle = new Throttle({ rate: 1024 }); // 1 KB per second
const writeStream = fs.createWriteStream('output.txt');
readStream.pipe(throttle).pipe(writeStream);
Throttle Write Stream
This feature allows you to throttle the write stream to a specified rate. In this example, the data from 'input.txt' is read and written to 'output.txt' at a rate of 2 KB per second.
const fs = require('fs');
const { Throttle } = require('stream-throttle');
const readStream = fs.createReadStream('input.txt');
const throttle = new Throttle({ rate: 2048 }); // 2 KB per second
const writeStream = fs.createWriteStream('output.txt');
readStream.pipe(writeStream).pipe(throttle);
Throttle Duplex Stream
This feature allows you to throttle a duplex stream, which is both readable and writable. In this example, the duplex stream is throttled to a rate of 512 bytes per second.
const { Throttle } = require('stream-throttle');
const { Duplex } = require('stream');
const duplexStream = new Duplex({
read(size) {
this.push('data');
},
write(chunk, encoding, callback) {
console.log(chunk.toString());
callback();
}
});
const throttle = new Throttle({ rate: 512 }); // 512 bytes per second
duplexStream.pipe(throttle).pipe(duplexStream);
The 'limiter' package provides a generic rate limiting solution that can be used to throttle various types of operations, including streams. It is more flexible in terms of the types of operations it can throttle but requires more manual setup compared to stream-throttle.
The 'bottleneck' package is a powerful rate limiter that can be used to control the rate of asynchronous operations. While it is not specifically designed for streams, it can be adapted to throttle stream operations. It offers advanced features like clustering and priority queues.
The 'stream-meter' package measures the rate of data flowing through a stream but does not throttle it. It can be used in conjunction with other packages to implement throttling based on the measured rate. It is useful for monitoring and logging purposes.
A rate limiter for Node.js streams.
This module exports two classes, Throttle
and ThrottleGroup
.
Throttle
creates a single throttled stream, based on stream.Transform
. It accepts an opts
parameter with the following keys:
opts.rate
is the throttling rate, in bytes per second.opts.chunksize
(optional) is the maximum chunk size into which larger writes are decomposed; the default is opts.rate
/10.The opts
object may also contain options to be passed to the stream.Transform
constructor.
For example, the following code throttles stdin to stdout at 10 bytes per second:
process.stdin.pipe(new Throttle({rate: 10})).pipe(process.stdout)
ThrottleGroup
allows the creation of a group of streams whose aggregate bandwidth is throttled. The constructor accepts the same opts
argument as for Throttle
. Call throttle
on a ThrottleGroup
object to create a new throttled stream belonging to the group.
For example, the following code creates two HTTP connections to www.google.com:80
, and throttles their aggregate (downstream) bandwidth to 10 KB/s:
var addr = { host: 'www.google.com', port: 80 };
var tg = new ThrottleGroup({rate: 10240});
var conn1 = net.createConnection(addr),
conn2 = net.createConnection(addr);
var thr1 = conn1.pipe(tg.throttle()),
thr2 = conn2.pipe(tg.throttle());
// Reads from thr1 and thr2 are throttled to 10 KB/s in aggregate
This package installs a throttleproxy
binary which implements a command-line utility for throttling connections. Run throttleproxy -h
for instructions.
Feel free to open an issue or send a pull request.
BSD-style. See the LICENSE file.
Copyright © 2013 Tiago Quelhas. Contact me at <tiagoq@gmail.com>
.
FAQs
A rate limiter for Node.js streams.
The npm package stream-throttle receives a total of 524,204 weekly downloads. As such, stream-throttle popularity was classified as popular.
We found that stream-throttle demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.