Связь ZeroMQ PUB-SUB: SUB ничего не получаетC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Связь ZeroMQ PUB-SUB: SUB ничего не получает

Сообщение Anonymous »

Я пытаюсь наладить связь PUB-SUB в ZeroMQ, где PUB находится в C++, а SUB в Python. Я использую Python 3.8, ZeroMQ 4.3.2, pyzmq 18.1.1 и cppzmq 4.5.0

The PUB:

Код: Выделить всё

    int main()
{
Sleep(10000);

zmq::context_t context(1);
zmq::socket_t publisher(context, ZMQ_PUB);
publisher.bind("tcp://*:5556");

int zipcode, temperature, relhumidity;
while (true) {

//  Get values (first supposed to be random)
zipcode = 10001;
temperature = 27;
relhumidity = 61;

//  Send message to the subscriber
zmq::message_t message(20);
snprintf((char *)message.data(), 20, "%05d %d %d", zipcode, temperature, relhumidity);
publisher.send(message, zmq::send_flags::none);

std::fprintf(stderr, "[INFO] Sent data: %i, %i, %i \n", zipcode, temperature, relhumidity);

if (fValue && j >= fValue) {
break;
}
j++;
}
}
SUB:

Код: Выделить всё

import sys
import zmq

#  Socket to talk to server
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5556")

# Subscribe to zipcode, default is NYC, 10001
zip_filter = "10001"

# Python 2 - ascii bytes to unicode str
if isinstance(zip_filter, bytes):
zip_filter = zip_filter.decode('ascii')
socket.setsockopt_string(zmq.SUBSCRIBE, zip_filter)

# Process 5 updates
for update_nbr in range(3):
string = socket.recv_string()

zipcode, temperature, relhumidity = string.split()
print("Received data : %s , %d , %d" % (zip_filter, temperature, relhumidity))
Но я не могу заставить его работать, поскольку SUB вечно ждет string =ocket.recv_string(), тогда как PUB отправляет сообщения без ошибок. Действительно, он возвращает длину отправленных сообщений.

Примечания:
  • Сон предназначен для пробного использования, чтобы иметь возможность запустить SUB до отправки PUB. Но если я удалю его и сначала запущу SUB, у меня будет такое же поведение.
  • Если я сделаю следующее, он напечатает :

Код: Выделить всё

Err = socket.connect("tcp://localhost:5556")
print(Err)
Я новичок в ZeroMQ и не знаю, с чего начать, чтобы решить эту проблему. Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/592 ... es-nothing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»