Bindings for node.js and io.js to ZeroMQ


ØMQ bindings for node.js.

First make sure ZeroMQ is installed. This module is compatible with ZeroMQ versions 2, 3 and 4. The installation process varies by platform, but headers are mandatory. Most Linux distributions provide these headers with -devel packages like zeromq-devel or zeromq3-devel. Homebrew for OS X provides versions 4 and 3 with packages zeromq and zeromq3, respectively. A Chris Lea PPA is available for Debian-like users who want a version newer than currently provided by their distribution. Windows is supported but not actively maintained.

Note: For zap support with versions >=4 you need to have libzmq built and linked against libsodium. Check the Travis configuration for a list of what is tested and therefore known to work.

With ZeroMQ headers installed, you can install and use this module:

$ npm install zmq
// producer.js 
var zmq = require('zmq')
  , sock = zmq.socket('push');
console.log('Producer bound to port 3000');
  console.log('sending work');
  sock.send('some work');
}, 500);
// worker.js 
var zmq = require('zmq')
  , sock = zmq.socket('pull');
console.log('Worker connected to port 3000');
sock.on('message', function(msg){
  console.log('work: %s', msg.toString());
// pubber.js 
var zmq = require('zmq')
  , sock = zmq.socket('pub');
console.log('Publisher bound to port 3000');
  console.log('sending a multipart message envelope');
  sock.send(['kitty cats', 'meow!']);
}, 500);
// subber.js 
var zmq = require('zmq')
  , sock = zmq.socket('sub');
sock.subscribe('kitty cats');
console.log('Subscriber connected to port 3000');
sock.on('message', function(topicmessage) {
  console.log('received a message related to:', topic, 'containing message:', message);

Install dev deps:

 $ npm install


 $ make


 $ make test

Benchmarks are available in the perf directory, and have been implemented according to the zmq documentation: How to run performance tests

In the following examples, the arguments are respectively:

  • the host to connect to/bind on
  • message size (in bytes)
  • message count

You can run a latency benchmark by running these two commands in two separate shells:

node ./local_lat.js tcp:// 1 100000
node ./remote_lat.js tcp:// 1 100000

And you can run throughput tests by running these two commands in two separate shells:

node ./local_thr.js tcp:// 1 100000
node ./remote_thr.js tcp:// 1 100000