110 lines
1.8 KiB
Markdown
110 lines
1.8 KiB
Markdown
|
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.
|
||
|
|
||
|
You must pass each worker via `addWorker()` so that it signals the worker to creates
|
||
|
its own rpc-wrapped instance.
|
||
|
|
||
|
### 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({
|
||
|
instance: db
|
||
|
, methods: [ 'get', 'put' ]
|
||
|
, name: 'foo-level'
|
||
|
});
|
||
|
|
||
|
|
||
|
// You must add each worker
|
||
|
crpc.addWorker(cluster.fork());
|
||
|
|
||
|
|
||
|
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({
|
||
|
instance: require('level')('./mydb')
|
||
|
, 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);
|
||
|
});
|
||
|
```
|