vubsub
v1.2.0
Published
Pub/Sub for Node.js and MongoDB
Downloads
121
Readme
vubsub
Pub/Sub for Node.js and MongoDB
vubsub is a Pub/Sub implementation for Node.js on top of MongoDB tailable cursors. vubsub was inspired by mubsub.
The main differences between vubsub and mubsub are:
- Active clients are tracked via a dedicated clients collection
- You can specify a namespace for each client (or group of clients): a namespace is a mapped to a collection (ns_namespace) where all the messages for that namespace are stored
- When connecting a client to a channel, you can specify the _id of the last received message and restart receiving message from that point.
vubsub uses Q, Kris Kowal's implementation of Promises.
How to Install
npm install vubsub
How to use
To create a new client, simply call the create function passing a db instance and, optionally, a metadata object. If the metadata contains the ns key, it'll be used as the namespace for the client (i.e. the client will be linked to a collection named ns_namespace). The metadata is stored, together with the client id in the clients collection (you can you this to keep track of your clients).
var vubsub = require('vubsub')
, MongoClient = require('mongodb').MongoClient
MongoClient.connect('mongodb://localhost/test', { auto_reconnect: true }, function(err, db) {
if (err || !db) throw new Error('failed to connect to the db');
vubsub.create(db, { ns: 'myNamespace' }).then(function(client) {
console.log('Client connected: ' + client.id);
});
});
To create a channel and listen to events on the channel:
vubsub.create(db, { ns: 'myNamespace' }).then(function(client) {
return client.channel('myChannel' /*, you can pass here the id of the last received message */);
}).then(function(channel) {
console.log('Created channel ' + channel.name);
channel.on('myEvent', function(event) {
console.log('Received event', event);
});
});
To send a message to a channel:
channel.send('myEvent', { a: 1, b: 2}).then(function() {
console.log('Message sent');
});