CatTail
2/9/2017 - 10:17 AM

Simple Req/Rep pattern for socket.io (which is Pub/Sub in nature)

Simple Req/Rep pattern for socket.io (which is Pub/Sub in nature)

var io = require('socket.io')();

io.on('connection', function (socket) {
  socket.on('req', (message) => {
    socket.emit('rep', message)
  })
});

io.listen(8088);
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.2/socket.io.js"></script>
<script>
  var socket = io('http://localhost:8088');
  var route = createRouter((reply) => {
    socket.on('rep', reply)
  })
  socket.emit('req', route('hello world', (data) => {
    console.log(data)
  }))

  function createRouter(onReply) {
    var seq = 0
    var map = {}

    function reply(message) {
      map[message[0].seq](message[1])
    }

    function route(body, callback) {
      seq++
      var envelope = {seq}
      var message = [envelope, body]
      map[seq] = callback
      return message
    }

    onReply(reply)

    return route
  }
</script>