Compare commits
	
		
			No commits in common. "master" and "v2.0.2" have entirely different histories.
		
	
	
		
	
		
							
								
								
									
										71
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								README.md
									
									
									
									
									
								
							@ -28,31 +28,14 @@ If you need that functionaliy, use v1 instead of v2.
 | 
				
			|||||||
Usage
 | 
					Usage
 | 
				
			||||||
=====
 | 
					=====
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In its simplest form, you use this module nearly exactly the way you would
 | 
					 | 
				
			||||||
the any other storage module, with the exception that you must wait for
 | 
					 | 
				
			||||||
the inter-process initialization to complete.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
When not using any of the options the usage is the same for the master and the worker:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```javascript
 | 
					 | 
				
			||||||
require('cluster-store').create().then(function (store) {
 | 
					 | 
				
			||||||
  // initialization is now complete
 | 
					 | 
				
			||||||
  store.set('foo', 'bar');
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### standalone (non-cluster)
 | 
					### standalone (non-cluster)
 | 
				
			||||||
--------------
 | 
					--------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There is no disadvantage to using this module standalone.
 | 
					The usage is exactly the same as **master**, no changes necessary.
 | 
				
			||||||
The additional overhead of inter-process communication is only added when
 | 
					 | 
				
			||||||
a worker is added.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
As such, the standalone usage is identical to usage in master process, as seen below.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
### master
 | 
					### master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In the **master** process you will create the real store instance.
 | 
					In the **master**/**standalone** process you will create the real store instance.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you need to manually specify which worker will be enabled for this funcitonality
 | 
					If you need to manually specify which worker will be enabled for this funcitonality
 | 
				
			||||||
you must set `addOnFork` to `false` and call `addWorker()` manually.
 | 
					you must set `addOnFork` to `false` and call `addWorker()` manually.
 | 
				
			||||||
@ -63,7 +46,7 @@ you must set `addOnFork` to `false` and call `addWorker()` manually.
 | 
				
			|||||||
var cluster = require('cluster');
 | 
					var cluster = require('cluster');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var cstore = require('cluster-store/master').create({
 | 
					var cstore = require('cluster-store/master').create({
 | 
				
			||||||
  name: 'foo-store'       // necessary when using multiple instances
 | 
					  name: 'foo-store'
 | 
				
			||||||
, store: null             // use default in-memory store
 | 
					, store: null             // use default in-memory store
 | 
				
			||||||
, addOnFork: true         // default
 | 
					, addOnFork: true         // default
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
@ -76,8 +59,7 @@ cstore.then(function (store) {
 | 
				
			|||||||
});
 | 
					});
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Note: `store` can be replaced with any `express/session`-compatible store, such as:
 | 
					Note: `store` can be replaced with any `express/session` store, such as:
 | 
				
			||||||
 | 
					 | 
				
			||||||
  * `new require('express-session/session/memory')()`
 | 
					  * `new require('express-session/session/memory')()`
 | 
				
			||||||
  * `require('level-session-store')(session)`
 | 
					  * `require('level-session-store')(session)`
 | 
				
			||||||
  * and others
 | 
					  * and others
 | 
				
			||||||
@ -131,21 +113,48 @@ Example
 | 
				
			|||||||
'use strict';
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var cluster = require('cluster');
 | 
					var cluster = require('cluster');
 | 
				
			||||||
 | 
					var cstore;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require('cluster-store').create({
 | 
					 | 
				
			||||||
  name: 'foo-store'
 | 
					 | 
				
			||||||
}).then(function (store) {
 | 
					 | 
				
			||||||
if (cluster.isMaster) {
 | 
					if (cluster.isMaster) {
 | 
				
			||||||
    store.set('foo', 'bar');
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  cstore = require('./master').create({
 | 
				
			||||||
 | 
					    name: 'foo-level'
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  cstore.then(function (store) {
 | 
				
			||||||
 | 
					    store.put('foo', 'bar');
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // create as many workers as you need
 | 
				
			||||||
 | 
					  cluster.fork();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  cstore = require('./worker').create({
 | 
				
			||||||
 | 
					    name: 'foo-level'
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cstore.then(function (store) {
 | 
				
			||||||
 | 
					  setTimeout(function () {
 | 
				
			||||||
    store.get('foo', function (err, result) {
 | 
					    store.get('foo', function (err, result) {
 | 
				
			||||||
    console.log(result);
 | 
					      console.log(cluster.isMaster && '0' || cluster.worker.id.toString(), "store.get('foo')", result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (!cluster.isMaster) {
 | 
				
			||||||
 | 
					        process.exit(0);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					  }, 250);
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (cluster.isMaster) {
 | 
					process.on('unhandledRejection', function (err) {
 | 
				
			||||||
  cluster.fork();
 | 
					  console.log('unhandledRejection', err);
 | 
				
			||||||
  cluster.fork();
 | 
					});
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								index.js
									
									
									
									
									
								
							@ -1,9 +1,12 @@
 | 
				
			|||||||
'use strict';
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var cluster = require('cluster');
 | 
					console.error("");
 | 
				
			||||||
 | 
					console.error("One does not simply require('memstore-cluster');");
 | 
				
			||||||
 | 
					console.error("");
 | 
				
			||||||
 | 
					console.error("Usage:");
 | 
				
			||||||
 | 
					console.error("\trequire('memstore-cluster/master').create({ name: ... });");
 | 
				
			||||||
 | 
					console.error("\trequire('memstore-cluster/worker').create({ name: ... });");
 | 
				
			||||||
 | 
					console.error("");
 | 
				
			||||||
 | 
					console.error("");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (cluster.isMaster) {
 | 
					process.exit(1);
 | 
				
			||||||
  module.exports = require('./master');
 | 
					 | 
				
			||||||
} else {
 | 
					 | 
				
			||||||
  module.exports = require('./worker');
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								package.json
									
									
									
									
									
								
							@ -1,8 +1,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "cluster-store",
 | 
					  "name": "cluster-store",
 | 
				
			||||||
  "version": "2.0.8",
 | 
					  "version": "2.0.2",
 | 
				
			||||||
  "description": "A wrapper to enable the use of any in-process store with node cluster via cluster process and worker messages (i.e. for Raspberry Pi servers).",
 | 
					  "description": "A wrapper to enable the use of any in-process store with node cluster via cluster process and worker messages (i.e. for Raspberry Pi servers).",
 | 
				
			||||||
  "homepage": "https://git.coolaj86.com/coolaj86/cluster-store.js",
 | 
					 | 
				
			||||||
  "main": "index.js",
 | 
					  "main": "index.js",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "test": "node test-cluster.js",
 | 
					    "test": "node test-cluster.js",
 | 
				
			||||||
@ -10,10 +9,8 @@
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  "repository": {
 | 
					  "repository": {
 | 
				
			||||||
    "type": "git",
 | 
					    "type": "git",
 | 
				
			||||||
    "url": "git+https://git.coolaj86.com/coolaj86/cluster-store.js.git"
 | 
					    "url": "git+https://github.com/coolaj86/cluster-store.git"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "bundleDependencies": false,
 | 
					 | 
				
			||||||
  "deprecated": false,
 | 
					 | 
				
			||||||
  "keywords": [
 | 
					  "keywords": [
 | 
				
			||||||
    "store",
 | 
					    "store",
 | 
				
			||||||
    "session",
 | 
					    "session",
 | 
				
			||||||
@ -23,16 +20,13 @@
 | 
				
			|||||||
    "cluster",
 | 
					    "cluster",
 | 
				
			||||||
    "rpi2"
 | 
					    "rpi2"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "author": {
 | 
					  "author": "AJ ONeal <coolaj86@gmail.com> (http://coolaj86.com/)",
 | 
				
			||||||
    "name": "AJ ONeal",
 | 
					 | 
				
			||||||
    "email": "coolaj86@gmail.com",
 | 
					 | 
				
			||||||
    "url": "https://coolaj86.com/"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "license": "Apache-2.0",
 | 
					  "license": "Apache-2.0",
 | 
				
			||||||
  "bugs": {
 | 
					  "bugs": {
 | 
				
			||||||
    "url": "https://git.coolaj86.com/coolaj86/cluster-store.js/issues"
 | 
					    "url": "https://github.com/coolaj86/cluster-store/issues"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  "homepage": "https://github.com/coolaj86/cluster-store#readme",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "cluster-rpc": "^v1.0.6"
 | 
					    "cluster-rpc": "^1.0.3"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										26
									
								
								simplest.js
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								simplest.js
									
									
									
									
									
								
							@ -1,26 +0,0 @@
 | 
				
			|||||||
'use strict';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var cluster = require('cluster');
 | 
					 | 
				
			||||||
var cstore;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
require('./').create({
 | 
					 | 
				
			||||||
  name: 'foo-store'
 | 
					 | 
				
			||||||
}).then(function (store) {
 | 
					 | 
				
			||||||
  if (cluster.isMaster) {
 | 
					 | 
				
			||||||
    cluster.fork();
 | 
					 | 
				
			||||||
    cluster.fork();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    store.set('foo', 'bar');
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  store.get('foo', function (err, result) {
 | 
					 | 
				
			||||||
    console.log(cluster.isMaster && '0' || cluster.worker.id.toString(), 'foo', result);
 | 
					 | 
				
			||||||
    if (!cluster.isMaster) {
 | 
					 | 
				
			||||||
      process.exit(0);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
process.on('unhandledRejection', function (err) {
 | 
					 | 
				
			||||||
  console.log('unhandledRejection', err);
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user