A simple way to wrap a single-instance module to enable it to work with node cluster.
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
AJ ONeal 4ad7b03117 v1.0.7 vor 6 Jahren
process v1.0.6 vor 6 Jahren
.gitignore Initial commit vor 8 Jahren
LICENSE Initial commit vor 8 Jahren
README.md add forks on 'fork' event vor 8 Jahren
index.js v1.0.0 vor 8 Jahren
master.js v1.0.6 vor 6 Jahren
package.json v1.0.7 vor 6 Jahren
prefixes.js v1.0.6 vor 6 Jahren
test.js v1.0.6 vor 6 Jahren
worker.js v1.0.6 vor 6 Jahren

README.md

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.

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.

master

// 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({
  addOnFork: true                 // default
, instance: db
, methods: [ 'get', 'put' ]
, name: 'foo-level'
});


// If you set addOnFork to false, You must manually add each worker
// crpc.addWorker(cluster.fork());


crpc.then(function (db) {
  // processes are connected and ready
  // 'db' is the original instance
});

worker

// 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

'use strict';

var cluster = require('cluster');
var crpc;


if (cluster.isMaster) {


  crpc = require('cluster-rpc/master').create({
    addOnFork: false
  , 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);
});