[zeromq-dev] Publisher SND_HWM

Mathieu Westphal mathieu.westphal at gmail.com
Fri Oct 17 17:49:55 CEST 2014


In the following example :

server :
#include <zmq.hpp>
#include <iostream>

int main () {
  //  Prepare our context and publisher
  zmq::context_t context (1);
  zmq::socket_t publisher (context, ZMQ_PUB);

  // Set high water mark to 1 NOT WORKING ?
  int hwm = 1;
  publisher.setsockopt(ZMQ_SNDHWM, &hwm, sizeof(hwm) );

  // Server main loop
  int counter = 0;
  while (1) {

    //  Send message to all subscribers
    zmq::message_t z_counter( sizeof(counter) );
    memcpy( z_counter.data(), &counter,  sizeof(counter) );
    publisher.send( z_counter );
    std::cout << counter <<  std::endl;
  return 0;

#include <unistd.h>
#include <iostream>
#include <zmq.hpp>

int main(int argc, char* argv[]) {
  // Creating zmq context
  zmq::context_t context (1);
  zmq::socket_t subscriber (context, ZMQ_SUB);
  subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0); 

  // main client loop
  int counter;
  zmq::message_t update;
  while (true) {
    // Subscribing/Receiving/Unsibscribing in order to limit the amount of queued messages.
    std::cout << *(static_cast<int*>(update.data())) <<  std::endl;
  return 0;

if i
launch the client
launch the server and after 3 seconds stop it

the client still receive hundreds of messages ( like 0.2% of it ) , wich have huge delay ( the server being already dead ).
I would have exepcted to receive only three message( one by seconds ), considering the fact that i've set the publisher high water mark to 1.

The HWM has an effect , because if i remove it i receive like all the messages, but i do not understand where all these message are stored .

I know i cas une ZMQ_CONFLATE to obtain the correct effect, i will probably use multiparts message in the future.


More information about the zeromq-dev mailing list