'XSUB not receiving in ZeroMQ XSUB/PUB setup

I would like to use XSUB/XPUB to enable multiple ZMQ publishers and subscribers. Everything works when I use zmq.proxy(xpub_socket, xsub_socket), but I need something custom because I need to write code between XSUB and XPUB that examines the messages.

Here's where I'm at:

import time
import zmq

context = zmq.Context()

address = '127.0.0.1'
pub_port = '3000'
sub_port = '3001'

# XSUB socket
xsub_socket = context.socket(zmq.XSUB)
xsub_socket.bind(f'tcp://{address}:{pub_port}')

# XPUB socket
xpub_socket = context.socket(zmq.XPUB)
xpub_socket.bind(f'tcp://{address}:{sub_port}')

time.sleep(1)

# PUB socket
pub_socket = context.socket(zmq.PUB)
pub_socket.connect(f'tcp://{address}:{pub_port}')

# SUB socket
sub_socket = context.socket(zmq.SUB)
sub_socket.subscribe('')
sub_socket.connect(f'tcp://{address}:{sub_port}')

time.sleep(1)

pub_socket.send_string('test')

time.sleep(1)

print(poller.poll(0))

The values sent from the PUB socket do not reach the XSUB socket.

I read here that the first byte needs to be 1. Both of these also don't work:

pub_socket.send(b'\x01')
pub_socket.send_multipart([b'\x01', 'test'.encode('utf-8')])

What am I doing wrong here?



Solution 1:[1]

You can do this with f-strings. For example:

x = 1
d = 5

print(f'{x:0{d}}')

Output:

00001

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Albert Winestein