Compare commits

..

No commits in common. "master" and "v2.0.3" have entirely different histories.

4 changed files with 58 additions and 78 deletions

View File

@ -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) {
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,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');
}

View File

@ -1,8 +1,7 @@
{ {
"name": "cluster-store", "name": "cluster-store",
"version": "2.0.8", "version": "2.0.3",
"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.4"
} }
} }

View File

@ -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);
});