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>