rawtx & rawblock ZMQ at the same time? I need your opinion, do you mind ? :)

I'm bulding a javascript layer on top of bitcoind.
I have bitcoind running on my server with rpc &amp; zmq enabled.

daemon=1
rpcallowip=0.0.0.0/0
rpcuser=xxxxxxxx
rpcpassword=xxxxxxxxx
server=1
rest=1
zmqpubhashblock=tcp://*:28332
zmqpubhashtx=tcp://*:28332
zmqpubrawblock=tcp://*:28332
zmqpubrawtx=tcp://*:28332
rpcworkqueue=100


My program goal is to listen for rawblock and rawtx ZMQ channels. This is my zmq client:

const socket = ZMQ.socket('sub')
socket.connect('tcp://myserverip:28332')

socket.on('message', (channel, data) =&gt; { 
  console.log(channel.toString())
})


So here is what happens :

subscribing to rawtx alone works, I receive the tx flow (approx 2.5tx per second)

socket.subscribe('rawtx')


subscribing to rawblock alone also works, I receive blocks (approx 1block per 10minutes)

socket.subscribe('rawblock')


But here is my problem, when subscribing to both, i do receive rawtx but no rawblock !

socket.subscribe('rawblock')
socket.subscribe('rawtx')


I'm assuming the ZMQ socket is flooded with rawtx, which result in missing rawblock event.

My question is: how would you debug this ? Have you guys faced this situation already ?

I know I could use the blocknotify option in bitcoind to forward the blockhash back to my client, and then load the rawblock via an rpc call back to bitcoind, but then I would use 2 different mechanisms (one for rawtx and blocknotify for rawblock) for something that was supposed to work in the first place :)

Thanks for your feedback !!
Try to subscribe by using prefix raw as topic . After this you will get both message on the one listener.

socket.subscribe('raw');

socket.on('message', (topicRaw: Buffer, bodyRaw: Buffer, ...tailRaw: Buffer[]) =&gt; {

    const sequenceRaw = tailRaw[tailRaw.length - 1];
    const sequence = sequenceRaw.readInt32LE(0);
    const topic = topicRaw.toString();


    if (topic == 'rawtx') {
        const rawTX = bodyRaw.toString('hex');
        console.log(topic, sequence, rawTX);

    } else if (topic == 'rawblock') {

        const rawBlock = bodyRaw.toString('hex', 0, 80);
        console.log(topic, sequence, rawBlock);
    }
});