Я пытаюсь реализовать шаблон паб-проекта, используя структуру zeromq. Идея состоит в том, чтобы запустить подписчика, а затем запустить издателя. Абонент будет слушать 100 сообщений, и издатель опубликует 100 сообщений. Все идет нормально... Однако на самом деле происходит то, что даже если абонент уже запущен и запущен при запуске издателя, не все сообщения принимаются подписчиком (100 сообщений будут подняты подписчиком, если издатель отправит не менее 500 сообщение). Похоже, что первые сообщения, отправленные издателем, не отправляются подписчику.
Любые идеи?
Спасибо заранее, Омер.
Код подписчика (запущен перед издателем)
int i=0;
zmq::context_t context (1);
zmq::socket_t subscriber (context, ZMQ_SUB);
subscriber.connect("tcp://localhost:5556");
subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0);
for (int update_nbr = 0; update_nbr < 100; update_nbr++)
{
zmq::message_t update;
subscriber.recv(&update);
i++;
std::cout<<"receiving :"<<i<<std::endl;
}
Код издателя (запущенный после подписчика)
zmq::context_t context (1);
zmq::socket_t publisher (context, ZMQ_PUB);
publisher.bind("tcp://*:5556");
int i = 0;
for (int update_nbr = 0; update_nbr < 100; update_nbr++)
{
// Send message to all subscribers
zmq::message_t request (20);
time_t seconds;
seconds = time (NULL);
char update [20]="";
sprintf (update, "%ld", seconds);
memcpy ((void *) request.data (), update,strlen(update));
publisher.send(request);
i++;
std::cout << "sending :" << i << std::endl;
}