tcppubsub

1.0.6 • Public • Published

tcppubsub

A simple and lightweight submarine build with publish-subscribe-request-response-methods. With a broker called broker 🐙 and a client called member 🐬.

Logo

A simple and fast exchange of data between nodejs-apps. Use the publish-subscribe-pattern to handle events or use the request-response-pattern to query or serve some data. Otherwise, get into a submarine and look for the octopus.

Build Status

Installing

npm i tcppubsub

Broker 🐙

A broker handles all data from the members, like sockets, topics and payload. You can use some events to handle the member-data directly at the broker-side.

Example

var tcppubsub = require('tcppubsub')
 
var port = 2223
var host = 'localhost'
var block = true // block payload sending to publisher, if he has subscribed the topic too. Default: true (blocked)
 
var broker = new tcppubsub.Broker(port, host, block)
broker.listen() 
 
broker.getConnections(function(err, numb){
    console.log('connected members:', numb)
})
 
// Publish on topics from broker
broker.pub('hey/ho', 'Yellow submarine!')
 
//use the socket-events like:
broker.on('end', function(msg){console.log('end:', msg)})
broker.on('close', function(member){console.log('close:', msg)})
broker.on('error', function(err){console.log('error:', err)})
broker.on('published', function(data){console.log('published:', data)})
broker.on('subscribed', function(topic){console.log('subscribed:', topic)})
broker.on('unsubscribed', function(topic){console.log('unsubscribed:', topic)})

Member 🐬

  • Publish-subscribe data.
  • Listen on requests.
  • Query some data from listeners.
  • Topic without wildcard 'app/configuration/server' .
  • Topic with wildcard 'app/configuration/#' or 'app/#/configuration',....
  • Data can be a string or a object and is emitted as a buffer.
  • When the broker restarting, it will automatically resubscribe all topics from subscription or listeners.

Connect

Call the connect-method to connect the member.

member.connect(function(){
    // Use other methods like sub, unsub, pub, req, listen in here.
})

Subscribe

Subscribe a topic. For multiple topics give a array of topics like ['topic1', 'topic2',...].

member.sub(topic, function(topic){})

Unsubscribe

Unsubscribe a topic. For multiple topics give a array of topics like ['topic1', 'topic2',...].

member.unsub(topic)

Publish

Publish some data on a topic.

member.pub(topic, data)

Request

Make a request on a listener topic. Set some timeout in ms for handle timeout-errors. Default-timeout: 10min.

member.req(topic, data, function(err, data, id){
    if(err){
        console.log(err) // timeout error
    }else{
        console.log(data)
    }
}, timeout)

Listen

Listen on a specific topic for requests. Handle the data and send the response with res.

member.listen(topic, function(data, res){
    console.log(data)
    res(data)
})

Message Event

Catch a message-event with namespace message for receiving all messages or use a specific topic.

member.on('my/super/topic', function(data){
    // data on the certain topic
})
 
/******* OR *******/
 
member.on('message', function(topic, data){
    // all data
})

Example

var tcppubsub = require('tcppubsub')
 
var port = 2223
var host = 'localhost'
 
//Create the member
var member = new tcppubsub.Member(port, host)
 
 
member.connect(function(){
 
    //Subscribe the topic without callback
    member.sub('app/configuration/service')
 
    // Subscribe the topic STRING or ARRAY
    member.sub('app/configuration/server', function(topic){
 
        // Publish some data STRING, OBJECT, ARRAY
        member.pub('app/configuration/server', {name: 'yamigr', b : 'Hello World'})
    })
 
 
    // Receive the data on the certain topic
    member.on('app/configuration/server', function(data){
 
        // Unsubscribe the topic
        member.unsub('app/configuration/server')
        console.log('rcv publish:', data)
    })
 
    /******* OR *******/
 
    // Receive all publishes on subscribed data
    member.on('message', function(topic, data){
        member.unsub('app/configuration/server')
        console.log(topic, data)
    })
 
 
    member.listen('app/static/config', function(data, res){
        res({ msg: 'Hello ' + data.name})
    })
 
 
    let timeout = 2000 // default 5000
 
    member.req('app/static/config', { name : 'Peter Pan'}, function(err, data, id){
        if(!err){
            console.log('rcv response:', data.msg)
        }
    }, timeout)
})
 
 
 

Authors

ToDo

  • Benchmark tests (broker and members)

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Package Sidebar

Install

npm i tcppubsub

Weekly Downloads

3

Version

1.0.6

License

MIT

Unpacked Size

75.7 kB

Total Files

11

Last publish

Collaborators

  • yamigr