socketmq

0.12.0 • Public • Published

SocketMQ

Build Status Coverage Status

Lightweight messaging library for node & browser.

Messaging Types

SocketMQ supports req/rep and pub/sub messaging patterns. Messaging pattern is high level concept of how messages should be handled on sending and receiving. It's client/server & transport agnostic which means you can use all 4 types of messaging pattern no matter you are connected to a server or being connected from a client with any of the transports supported.

Request/Response

Each request will be sent to one connected client/server and wait for response (round-robin scheduler).

// example/rep.js
var socketmq = require("../");
 
var smq = socketmq.bind("tcp://127.0.0.1:6363");
 
smq.on("bind", function() {
  console.log("rep bound");
});
 
var event = "hello"; // or you can call it topic or channel.
 
smq.on("connect", function(stream) {
  console.log("new connection");
  smq.req(event, "request from server", function(msg) {
    console.log(msg);
  });
});
 
smq.rep(event, function(msg, reply) {
  console.log("requested msg:" + msg);
  reply("Hi " + msg + ", world!");
});
// example/req.js
var socketmq = require("socketmq");
 
var smq = socketmq.connect("tcp://127.0.0.1:6363");
 
smq.on("connect", function(stream) {
  console.log("req connected to server");
});
 
setInterval(function() {
  smq.req("hello", "socketmq.req", function(msg) {
    console.log("replied msg:" + msg);
  });
}, 1000);
 
smq.rep("hello", function(msg, reply) {
  console.log("request from server", msg);
  reply("response from client");
});

Publish/Subscribe

A pub message will be distributed to all client/server connected and no response will be sent back. It's a fire and forget messaging pattern. Pub messages could be received by subscribing to the publishing topic.

// example/pub.js
var socketmq = require("socketmq");
 
var smq = socketmq.connect("tcp://0.0.0.0:6363");
 
smq.on("connect", function() {
  console.log("pub connected");
  setInterval(function() {
    smq.pub("pub.test", "hello");
  }, 1000);
});
// example/sub.js
var socketmq = require("socketmq");
 
var smq = socketmq.bind("tcp://127.0.0.1:6363");
 
smq.on("bind", function() {
  console.log("sub bound");
});
 
smq.sub("pub.test", function(data) {
  console.log("got pub message: " + data);
});

Using tags

SocketMQ can tag the streams and send messages to streams with specific tags.

var socketmq = require("socketmq");
 
var tcpUri = "tcp://127.0.0.1:6363";
var smq = socketmq.connect(tcpUri, function(stream) {
  // Tag the stream.
  smq.tag(stream, "tcp");
});
 
var tlsUri = "tls://127.0.0.1:46363";
smq.connect(tlsUri, function(stream) {
  smq.tag(stream, "tls");
});
 
// Then send messages using `reqTag` of `pubTag`
 
// `req` message only to server with `tcp` tag
smq.reqTag("tcp", "hello", "message", function() {
  // ...
});
 
// `pub` message only to server with `tls` tag
smq.pubTag("tls", "hello", "message");

Readme

Keywords

none

Package Sidebar

Install

npm i socketmq

Weekly Downloads

2

Version

0.12.0

License

MIT

Unpacked Size

95.6 kB

Total Files

39

Last publish

Collaborators

  • lsm
  • zir