2016-08-08 3 views
0

Я новичок в ZMQ и уже сделал учебники о шаблоне публикации подписки. Но для моей заявки они не совсем применимы. У меня есть два типа приложений. В приложении можно создавать подключения к нескольким «приложениям двух» по сети и отправлять их данные.ZMQ Опубликовать/Подписка шаблон издателя подключается к подписчикам

Я попытался реализовать это с помощью шаблона публикации/подписки, но вместо подписчика, подключенного к издателю, подписчик подключается к подписчикам.

Издательство:

zmq::context_t context(1); 
zmq::socket_t socket(context, ZMQ_PUB); 

socket.connect("tcp://localhost:5555"); 

std::string text = "Hello World"; 
zmq::message_t message(text.size()); 
memcpy(message.data(), text.c_str(), text.size()); 

socket.send(message); 

Subscriber:

zmq::context_t context(1); 
zmq::socket_t socket(context, ZMQ_SUB); 

socket.bind("tcp://*:5555"); 
const char* filter = "Hello "; 
socket.setsockopt(ZMQ_SUBSCRIBE, filter, strlen(filter)); 

zmq::message_t request; 
socket.recv(&request); 

std::string message = std::string(static_cast<char*>(request.data()), request.size()); 

std::cout << "Message received!" << std::endl; 
std::cout << message << std::endl; 

издатель finnishes без ошибок, но абонент застрял в RECV(). И да, я начинаю их в правильном порядке (абонент первым)

ответ

0

Я нашел решение самостоятельно: Проблема в том, что издатель отправил сообщение, прежде чем абонент был готов к получению. Простой

zmq_sleep(1) 

до

socket.send(message); 

сделал свою работу.

Смежные вопросы