2016-09-08 22:23:40 +00:00
|
|
|
cluster-rpc
|
|
|
|
===========
|
|
|
|
|
|
|
|
A simple way to wrap node.js modules for use with cluster even though they
|
|
|
|
were designed to be used in a single non-cluster instance.
|
|
|
|
|
|
|
|
Install
|
|
|
|
=======
|
|
|
|
|
|
|
|
```
|
|
|
|
npm install --save cluster-rpc
|
|
|
|
```
|
|
|
|
|
|
|
|
Usage
|
|
|
|
=====
|
|
|
|
|
|
|
|
In the **master** process you will create the real instance of whatever module
|
|
|
|
you're trying to use (for example express-session/session/memory, sqlite3, level)
|
|
|
|
and then you will supply the names of the methods you wish to export to **worker**
|
|
|
|
processes.
|
|
|
|
|
2016-09-09 00:25:08 +00:00
|
|
|
By default each worker will be added when `cluster` emits a `fork` event.
|
|
|
|
If needed you can set `addOnFork` to `false` and call `addWorker(worker)` manually.
|
2016-09-08 22:23:40 +00:00
|
|
|
|
|
|
|
### master
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
// You can pick any module with thunk-style callbacks
|
|
|
|
// For example:
|
|
|
|
var db = require('level')('./mydb')
|
|
|
|
|
|
|
|
|
|
|
|
// Wrap the instance
|
|
|
|
var crpc = require('cluster-rpc/master').create({
|
2016-09-09 00:25:08 +00:00
|
|
|
addOnFork: true // default
|
|
|
|
, instance: db
|
2016-09-08 22:23:40 +00:00
|
|
|
, methods: [ 'get', 'put' ]
|
|
|
|
, name: 'foo-level'
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2016-09-09 00:25:08 +00:00
|
|
|
// If you set addOnFork to false, You must manually add each worker
|
|
|
|
// crpc.addWorker(cluster.fork());
|
2016-09-08 22:23:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
crpc.then(function (db) {
|
|
|
|
// processes are connected and ready
|
|
|
|
// 'db' is the original instance
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
### worker
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
// retrieve the instance
|
|
|
|
var crpc = require('cluster-rpc/worker').create({
|
|
|
|
name: 'foo-level'
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// all listed methods will be rpc'd
|
|
|
|
crpc.then(function (db) {
|
|
|
|
// db.put, db.get
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
Example
|
|
|
|
=======
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
var cluster = require('cluster');
|
|
|
|
var crpc;
|
|
|
|
|
|
|
|
|
|
|
|
if (cluster.isMaster) {
|
|
|
|
|
|
|
|
|
|
|
|
crpc = require('cluster-rpc/master').create({
|
2016-09-09 00:25:08 +00:00
|
|
|
addOnFork: false
|
|
|
|
, instance: require('level')('./mydb')
|
2016-09-08 22:23:40 +00:00
|
|
|
, methods: [ 'get', 'put' ]
|
|
|
|
, name: 'foo-level'
|
|
|
|
});
|
|
|
|
crpc.addWorker(cluster.fork());
|
|
|
|
crpc.then(function () {
|
|
|
|
db.put('foo', 'bar');
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
|
|
|
|
|
|
|
|
crpc = require('cluster-rpc/worker').create({
|
|
|
|
name: 'foo-level'
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
crpc.then(function (db) {
|
|
|
|
setTimeout(function () {
|
|
|
|
db.get('foo', function (err, result) {
|
|
|
|
console.log("db.get('foo')", result);
|
|
|
|
});
|
|
|
|
}, 250);
|
|
|
|
});
|
|
|
|
```
|