JustinTulloss / zeromq.node

Node.js bindings to the zeromq library
MIT License
1.65k stars 286 forks source link

router/dealer proxy doesn't forward multipart msgs correctly #606

Open artiommorozov opened 5 years ago

artiommorozov commented 5 years ago

Besides multipart messages as in example below, this issue prevents chaining router/dealer proxies

const zmq = require('zeromq');

function viaProxy() {

    const addr1 = "tcp://127.0.0.1:8901";
    const addr2 = "tcp://127.0.0.1:8902";

    const req = zmq.socket('req');
    req.connect(addr1);

    const rep = zmq.socket('rep');
    rep.connect(addr2);
    rep.on('message', (...args) => { console.log(`via proxy <- ${args.length} ${args.join(',')}`); });

    const proxy1 = zmq.socket('router');
    proxy1.bindSync(addr1);

    const proxy2 = zmq.socket('dealer');
    proxy2.bindSync(addr2);

    zmq.proxy(proxy1, proxy2);

    req.send(['a', 'b']);
    rep.send('ack');
}

function direct1() {
    const addr1 = "tcp://127.0.0.1:8911";
    const addr2 = "tcp://127.0.0.1:8912";

    const req = zmq.socket('req');
    req.connect(addr1);

    const rep = zmq.socket('rep');
    rep.bindSync(addr1);
    rep.on('message', (...args) => { console.log(`direct <- ${args.length} ${args.join(',')}`); });

    req.send(['a', 'b']);
    rep.send('ack');    
}

direct1();
viaProxy();