!!! DEPRECIATED !!! SecureMQ has now replaced HyperMQ.
Message-oriented HTTP service inspired by axon and zeromq.
Unlike axon, hypermq uses HTTP for transport rather than plain TCP, this allows hypermq to have:
- encryption (SSL/TLS).
- authentication (Basic).
- firewall friendliness (single port).
If you do not require any of these three features then axon is recommend.
This is not a 'web browser' solution, to do that you could add socket.io on top of hypermq.
From your terminal, requires node.js.
npm install hypermq
closed
when peer closes.error
(err) when an un-handled socket error occurs.reconnect attempt
when a reconnection attempt is made.connected
(any url queries sent as object) when connected to the peer, or a peer connection is accepted.queued
(msg) when a message is enqueued, can use to save unsent messages.flushed
(total messages) queued when messages are flushed on connection.message
(msg) the message received by peer.
- push / pull
- pub / sub
- chit / chat
See examples
folder. To print debugging info use the --preview argument when running the app, for example:
node examples/pushpull/push.js --preview
push
s distribute messages round-robin:
var hypermq = require('hypermq');
var options = {
hostname: '127.0.0.1',
port: 3443,
secure: true,
key: __dirname + '/key.pem',
cert: __dirname + '/cert.pem',
apikey: 'za91j2bk72f483ap62x'
};
var service = hypermq.bind(options);
var myService = new service('myService', 'push');
console.log('myService:push server started');
setInterval(function(){
myService.send('hello');
}, 100);
Receiver of push
messages:
var hypermq = require('hypermq');
var options = {
hostname: '127.0.0.1',
port: 3443,
secure: true,
rejectUnauthorized: false,
apikey: 'za91j2bk72f483ap62x'
};
var service = hypermq.connect(options);
var myService = new service('myService', 'pull');
myService.on('message', function(msg){
console.log(msg.toString());
});
chit
s is bi-directional, broadcast to all chat
peers and can receive messages back:
var hypermq = require('hypermq');
var options = {
hostname: '127.0.0.1',
port: 3443,
secure: true,
key: __dirname + '/key.pem',
cert: __dirname + '/cert.pem',
apikey: 'za91j2bk72f483ap62x'
};
var service = hypermq.bind(options);
var myService = new service('myService', 'chit');
console.log('myService:chit server started');
myService.on('message', function(msg){
console.log(msg.toString());
});
setInterval(function(){
myService.send('hello chat');
}, 100);
chat
s is bi-directional, can receive and send messages to chit
:
var hypermq = require('hypermq');
var options = {
hostname: '127.0.0.1',
port: 3443,
secure: true,
rejectUnauthorized: false,
apikey: 'za91j2bk72f483ap62x'
};
var service = hypermq.connect(options);
var myService = new service('myService', 'chat');
myService.on('message', function(msg){
console.log(msg.toString());
});
setInterval(function(){
myService.send('hello chit');
}, 1000);
hypermq has two message protocols for you to choose from; AMP protocol, with node-amp-message, the second protocol available is Line Delimited JSON.
hypermq uses AMP by default as it is fastest and most flexible. AMP allows you to apply any message codec, such as: json, msgpack, or to use javascript/node.js objects: buffer (binary), strings. Line Delimited JSON is useful for connecting peer
s written in different languages.
Example sending javascript/node.js mixed object with the AMP protocol.
myService.send( {hello: 'world', x: 101, fab: true, image: new Buffer('binary image data')} );
Set message protocol options amp
, ldjson
:
{
protocol: 'amp' // (default), or: 'ldjson' for Line Deineated JSON.
}
You can benchmark hypermq. With secure
set to true will be slower as messages are encrypted.
Benchmark without batching
:
make bench
Benchmark with batching
:
make benchbatch
Sending a 200
byte sized batched
unsecure
message, on my laptop (dual-core i7), I get around 183,546 messages per second:
[2208 ops/s] [10001]
min: 2,208 ops/s
mean: 2,211 ops/s
median: 2,230 ops/s
total: 11,057 ops in 5s
through: 0.42 mb/s
------------------------------
events: 917,731
id: 23,388
mean: 183,546 ops/s.
------------------------------
Choose either: MIT or Apache 2.0.