vubsub

Pub/Sub for Node.js and MongoDB

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.

npm install vubsub

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(errdb) {
  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');
});