1- semaphore.js
2- ============
1+ # semaphore
32
4- [ ![ Build Status] ( https://travis-ci.org/abrkn/semaphore.js.svg?branch=master )] ( https://travis-ci.org/abrkn/semaphore.js )
3+ [ ![ NPM Package] ( https://img.shields.io/npm/v/semaphore.svg?style=flat-square )] ( https://www.npmjs.org/package/semaphore )
4+ [ ![ Build Status] ( https://img.shields.io/travis/abrkn/semaphore.js.svg?branch=master&style=flat-square )] ( https://travis-ci.org/abrkn/semaphore.js )
55
6- Install:
6+ [ ![ js-standard-style] ( https://cdn.rawgit.com/feross/standard/master/badge.svg )] ( https://github.com/feross/standard )
7+
8+
9+ ## Installation
10+
11+ ```
712npm install semaphore
13+ ```
14+
15+ ## Examples
816
917Limit simultaneous access to a resource.
1018
1119``` javascript
1220// Create
13- var sem = require (' semaphore' )(capacity);
21+ const Semaphore = require (' semaphore' )
22+ const sem = new Semaphore (capacity)
1423
1524// Take
1625sem .take (fn[, n= 1 ])
@@ -20,49 +29,46 @@ sem.take(n, fn)
2029sem .leave ([n])
2130```
2231
23-
2432``` javascript
2533// Limit concurrent db access
26- var sem = require (' semaphore' )(1 );
27- var server = require (' http' ).createServer (req, res) {
28- sem .take (function () {
29- expensive_database_operation (function (err , res ) {
30- sem .leave ();
31-
32- if (err) return res .end (" Error" );
33-
34- return res .end (res);
35- });
36- });
37- });
34+ const Semaphore = require (' semaphore' )
35+ const sem = new Semaphore (1 )
36+ const server = require (' http' ).createServer ((req , res ) => {
37+ sem .take (() => {
38+ expensive_database_operation ((err , res ) => {
39+ sem .leave ()
40+ res .end (err === null ? res : ' error' )
41+ })
42+ })
43+ })
3844```
3945
4046``` javascript
4147// 2 clients at a time
42- var sem = require (' semaphore' )(2 );
43- var server = require (' http' ).createServer (req, res) {
44- res .write (" Then good day, madam!" );
45-
46- sem .take (function () {
47- res .end (" We hope to see you soon for tea." );
48- sem .leave ();
49- });
50- });
48+ const Semaphore = require (' semaphore' )
49+ const sem = new Semaphore (2 )
50+ const server = require (' http' ).createServer ((req , res ) => {
51+ res .write (" Then good day, madam!" )
52+
53+ sem .take (() => {
54+ res .end (" We hope to see you soon for tea." )
55+ sem .leave ()
56+ })
57+ })
5158```
5259
5360``` javascript
5461// Rate limit
55- var sem = require (' semaphore' )( 10 );
56- var server = require ( ' http ' ). createServer (req, res) {
57- sem . take ( function () {
58- res . end ( " . " );
59-
60- setTimeout (sem .leave , 500 )
61- });
62- });
62+ const Semaphore = require (' semaphore' )
63+ const sem = new Semaphore ( 10 )
64+ const server = require ( ' http ' ). createServer (( req , res ) => {
65+ sem . take (() => {
66+ res . end ( " . " )
67+ setTimeout (() => sem .leave () , 500 )
68+ })
69+ })
6370```
6471
65- License
66- ===
72+ ## License
6773
6874MIT
0 commit comments