Comparing version 1.0.0 to 1.0.1
@@ -20,2 +20,5 @@ var util = require('util'); | ||
var task = item.task; | ||
item.task = function() { task(semaphore.leave); }; | ||
if (semaphore.current + item.n > semaphore.capacity) { | ||
@@ -26,3 +29,3 @@ return semaphore.queue.push(item); | ||
semaphore.current += item.n; | ||
item.task(); | ||
item.task(semaphore.leave); | ||
}, | ||
@@ -29,0 +32,0 @@ |
{ | ||
"name": "semaphore", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "semaphore for node", | ||
@@ -5,0 +5,0 @@ "engine": "node >= 0.6.0", |
semaphore.js | ||
============ | ||
Install: | ||
npm install semaphore | ||
Limit simultaneous access to a resource. | ||
```javascript | ||
// Create semaphore | ||
// Create | ||
var sem = require('semaphore')(capacity); | ||
// Take semaphore | ||
sem.take(function[, number]) | ||
sem.take(number, function) | ||
// Take | ||
sem.take(fn[, n=1]) | ||
sem.take(n, fn) | ||
// Leave semaphore | ||
sem.leave([number]) | ||
// Leave | ||
sem.leave([n]) | ||
``` | ||
@@ -20,7 +23,3 @@ | ||
```javascript | ||
// Prevent database from dying by only allowing 1 request at a time | ||
var cat = { | ||
}; | ||
// Limit concurrent db access | ||
var sem = require('semaphore')(1); | ||
@@ -41,3 +40,3 @@ var server = require('http').createServer(req, res) { | ||
```javascript | ||
// Only serve 2 clients at a time. | ||
// 2 clients at a time | ||
var sem = require('semaphore')(2); | ||
@@ -49,4 +48,17 @@ var server = require('http').createServer(req, res) { | ||
res.end("We hope to see you soon for tea."); | ||
sem.leave(); | ||
}); | ||
}); | ||
``` | ||
```javascript | ||
// Rate limit | ||
var sem = require('semaphore')(10); | ||
var server = require('http').createServer(req, res) { | ||
sem.take(function() { | ||
res.end("."); | ||
setTimeout(sem.leave, 500) | ||
}); | ||
}); | ||
``` |
@@ -103,3 +103,3 @@ var should = require('should'); | ||
s.take(function() { values.push(2); setTimeout(function() { s.leave(); }, speed * 2); }); | ||
s.take(function() { values.push(3); setTimeout(function() { s.leave(); }, speed * 3); }); | ||
s.take(function(leave) { values.push(3); setTimeout(function() { leave(); }, speed * 3); }); | ||
s.take(function() { values.push(4); }); | ||
@@ -158,5 +158,5 @@ s.take(function() { values.push(5); }); | ||
s.take(5, function() { // 5 | ||
s.take(5, function(leave) { // 5 | ||
s.take(4, function() { // 1 | ||
s.leave(4); // 5 | ||
leave(4); // 5 | ||
@@ -163,0 +163,0 @@ s.take(5, done); // 0 |
6429
172
61