
Security News
Node.js Moves Toward Stable TypeScript Support with Amaro 1.0
Amaro 1.0 lays the groundwork for stable TypeScript support in Node.js, bringing official .ts loading closer to reality.
drr-fair-queue
Advanced tools
With this module, you can queue work from multiple incoming sources and pull work for the queue in a fair order. One source cannot cause starvation of the other sources. This module is an implemenation of the work in Efficient Fair Queuing Using Deficit Round-Robin
A fair queue could be used to schedule incoming requests from users, to make sure that no user reduces the performance of other users on the same server. Or, the queue could be used to balance outgoing requests to a downstream server, making sure that one user does not consume all of the connections in a pool.
When inserting elements into the queue, three pieces of information are needed.
In this example, source 1 will queue two items of work before source 2 can queue anything. But, when the items are popped, the work from source 2 will be popped first so that source 1 does not starve source 2.
var FairQueue = require('drr-fair-queue');
var queue = new FairQueue();
queue.push('source1', 'item1', 1);
queue.push('source1', 'item2', 1);
queue.push('source2', 'item3', 1);
queue.pop(); // Will pop item 1 from source 1
queue.pop(); // Will pop item 3 from source 2
queue.pop(); // Will pop item 2 from source 1
To know when work is ready to be processed, you can register a hook as an option to the constructor. Here is an example program that watches for work and processes when it's available:
var FairQueue = require('drr-fair-queue');
var freeWorkers = 1;
function processWork() {
if (freeWorkers === 0) {
// Skipping work because all workers are busy
return;
}
freeWorkers--;
var work = queue.pop();
if (!work) {
freeWorkers++;
return;
} else {
// Do something with the work
setImmediate(function () {
console.log('Processing work', work);
freeWorkers++;
processWork();
});
}
}
var queue = new FairQueue({onUnidle: processWork});
queue.push('source1', 'item1', 1);
queue.push('source1', 'item2', 1);
queue.push('source2', 'item3', 1);
FAQs
An fair queue based using Deficit Round-Robin
The npm package drr-fair-queue receives a total of 0 weekly downloads. As such, drr-fair-queue popularity was classified as not popular.
We found that drr-fair-queue 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
Amaro 1.0 lays the groundwork for stable TypeScript support in Node.js, bringing official .ts loading closer to reality.
Research
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
Product
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.