clusterhub
An attempt at giving multi process node programs a simple and efficient way to share data.
Usage
const cluster = ;const numCPUs = length;const hub = ; if clusterisMaster // Fork workers. for let i = 0; i < numCPUs; i++ cluster; else hub; // emit event to all workers hub;
Features
- Efficient event emitter system. Clusterhub will not send an event to a process that isn't listening for it. Events from the same process of a listener will be emitted synchronously.
- In process database. Each hub has its own instance of a redis-like database powered by EventVat.
Motive
Node.js is a perfect candidate to developing Date Intensive Real-time Applications. Load balancing in these applications can become complicated when having to share data between processes.
A remote database can be an easy solution for this, but it's not the most optimal. Communicating with a local process is several times faster than opening remote requests from a database. And even if the database is hosted locally, the overhead of communicating with yet another program is lessened.
Note that this module is experimental. It currently works by using a process's internal messaging system.
Made with Clusterhub
- socket.io-clusterhub - Sync data between multi-process socket.io applications.
- clusterchat - A multi-process chat that shows off socket.io-clusterhub.
API
hub.createHub(id)
Clusterhub already comes with a default global hub. But you can use this if you want to create more.
Hub#destroy()
Call to disable hub from emitting and receiving remote messages/commands.
Additionally, all functions from the regular EventEmitter are included. Plus a couple of extras.
Hub#emitLocal(event, ...args)
Emit an event only to the current process.
Hub#emitRemote(event, ...args)
Emit an event only to other worker processes and master. Or only to workers if the current process is the master.
hub; hub;
All functions from EventVat are included as well. Their returned value can be accessed by providing a callback as the last argument. Or optionally by its returned value if called by the master.
worker process
hub;
master process
let returnedVal = hub; // But since it's the master process it has direct access to the database.console; // true
Install
npm install clusterhub
Tests
Tests are written with mocha
npm test