[zeromq-dev] DOWNSTREAM persistence

Martin Sustrik sustrik at 250bpm.com
Sat Jul 24 09:47:10 CEST 2010


Ilja,

> I need a one-way communication between one producer and several consumers.
> 
> I wrote a trivial client application
> ==
>         zmq::socket_t s (ctx, ZMQ_DOWNSTREAM);
>         int64_t number_of_messages = 2;
>         s.setsockopt(ZMQ_HWM, &number_of_messages, sizeof(int64_t));
>         // Connect it to port 23055 on localhost using the TCP transport
>         s.connect ("tcp://localhost:23055");
>         s.connect ("tcp://localhost:23056");
> 
>         for(int i = 0; i < 10; ++i)
>         {
>             s.send (query);
>         }
>         sleep(<forever>)
> ==
> 
> When the Client (and only client) is run, is freezes after the 4th send, which perfectly conforms with ZMQ_DOWNSTREAM documentation.
> 
> When first Server application is run, it gets 8 messages (and Client goes further). This is understandable.
> When second Server application is run, it gets nothing. 
> 
> 
> ==
> dev:~/projects/zeromq-play >./server 23056
> Received query: 1(port 23056)
> Received query: 3(port 23056)
> Received query: 4(port 23056)
> Received query: 5(port 23056)
> Received query: 6(port 23056)
> Received query: 7(port 23056)
> Received query: 8(port 23056)
> Received query: 9(port 23056)
>   C-c C-c
> dev:~/projects/zeromq-play >./server 23055
>   C-c C-c
> dev:~/projects/zeromq-play >
> ==
> 
> The question is why messages #0 and #2 are lost.

Strange. This looks like #0 and #2 were sent to someone else. Haven't 
there been a different server connected to the client before the test?

Martin



More information about the zeromq-dev mailing list