Compare commits

...

3 Commits

Author SHA1 Message Date
AJ ONeal
f81b091f97 v2.0.8 2018-04-20 18:51:49 -06:00
AJ ONeal
fc5859ddc8 v2.0.4 2016-09-08 18:49:35 -06:00
AJ ONeal
e3aa7e90ad simplify by eliminating options 2016-09-08 18:49:31 -06:00
4 changed files with 78 additions and 58 deletions

View File

@ -28,14 +28,31 @@ 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)
-------------- --------------
The usage is exactly the same as **master**, no changes necessary. There is no disadvantage to using this module standalone.
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**/**standalone** process you will create the real store instance. In the **master** 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.
@ -46,7 +63,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' name: 'foo-store' // necessary when using multiple instances
, store: null // use default in-memory store , store: null // use default in-memory store
, addOnFork: true // default , addOnFork: true // default
}); });
@ -59,7 +76,8 @@ cstore.then(function (store) {
}); });
``` ```
Note: `store` can be replaced with any `express/session` store, such as: Note: `store` can be replaced with any `express/session`-compatible 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
@ -113,48 +131,21 @@ 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) {
store.set('foo', 'bar');
}
store.get('foo', function (err, result) {
console.log(result);
});
});
if (cluster.isMaster) { if (cluster.isMaster) {
cstore = require('./master').create({
name: 'foo-level'
});
cstore.then(function (store) {
store.put('foo', 'bar');
});
// create as many workers as you need
cluster.fork(); cluster.fork();
cluster.fork();
} }
else {
cstore = require('./worker').create({
name: 'foo-level'
});
}
cstore.then(function (store) {
setTimeout(function () {
store.get('foo', function (err, result) {
console.log(cluster.isMaster && '0' || cluster.worker.id.toString(), "store.get('foo')", result);
if (!cluster.isMaster) {
process.exit(0);
}
});
}, 250);
});
process.on('unhandledRejection', function (err) {
console.log('unhandledRejection', err);
});
``` ```

View File

@ -1,12 +1,9 @@
'use strict'; 'use strict';
console.error(""); var cluster = require('cluster');
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("");
process.exit(1); if (cluster.isMaster) {
module.exports = require('./master');
} else {
module.exports = require('./worker');
}

View File

@ -1,7 +1,8 @@
{ {
"name": "cluster-store", "name": "cluster-store",
"version": "2.0.3", "version": "2.0.8",
"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",
@ -9,8 +10,10 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/coolaj86/cluster-store.git" "url": "git+https://git.coolaj86.com/coolaj86/cluster-store.js.git"
}, },
"bundleDependencies": false,
"deprecated": false,
"keywords": [ "keywords": [
"store", "store",
"session", "session",
@ -20,13 +23,16 @@
"cluster", "cluster",
"rpi2" "rpi2"
], ],
"author": "AJ ONeal <coolaj86@gmail.com> (http://coolaj86.com/)", "author": {
"name": "AJ ONeal",
"email": "coolaj86@gmail.com",
"url": "https://coolaj86.com/"
},
"license": "Apache-2.0", "license": "Apache-2.0",
"bugs": { "bugs": {
"url": "https://github.com/coolaj86/cluster-store/issues" "url": "https://git.coolaj86.com/coolaj86/cluster-store.js/issues"
}, },
"homepage": "https://github.com/coolaj86/cluster-store#readme",
"dependencies": { "dependencies": {
"cluster-rpc": "^1.0.4" "cluster-rpc": "^v1.0.6"
} }
} }

26
simplest.js Normal file
View File

@ -0,0 +1,26 @@
'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);
});