[zeromq-dev] Simple PUB / SUB test does not work

Aurélien .... kinju59 at gmail.com
Mon Sep 26 18:23:37 CEST 2016


Big big error :

subscriber.setsockopt(ZMQ_SUBSCRIBE, "A");
=>
subscriber.setsockopt(ZMQ_SUBSCRIBE, "A", 1);

With this fix ( and Sleep(10) ), it works perfectly !

Thanks,

kin

On Fri, Sep 23, 2016 at 2:43 PM, Luca Boccassi <luca.boccassi at gmail.com>
wrote:

> Not that strange, the connect is asynchronous, so there is absolutely
> no guarantee on when it actually happens, by design.
>
> In production, if you need synch, either use an out-of-band control
> channel (eg: req-rep) or switch to XPUB, which gives you notifications
> of subscribe/unsubscribe.
>
> On 23 September 2016 at 13:16, Aurélien .... <kinju59 at gmail.com> wrote:
> > Hi,
> >
> > I had to increase the "sleep" to 5 seconds and it worked.
> >
> > Strange !
> >
> > On Fri, Sep 23, 2016 at 10:00 AM, Aurélien .... <kinju59 at gmail.com>
> wrote:
> >>
> >> I tried with 127.0.0.1 on bind and connect functions, it didn't worked.
> >>
> >> I also tried on Linux (Ubuntu 16.04), same result.
> >>
> >> Very strange !
> >>
> >> On Thu, Sep 22, 2016 at 7:12 PM, Luca Boccassi <luca.boccassi at gmail.com
> >
> >> wrote:
> >>>
> >>> Windows has some weirdness on the localhost I think, try to avoid the
> >>> wildcard and bind and connect to 127.0.0.1
> >>>
> >>> On 22 September 2016 at 17:57, Aurélien .... <kinju59 at gmail.com>
> wrote:
> >>> > Thank you for your replies.
> >>> >
> >>> > I tried with that :
> >>> >
> >>> > zmq::socket_t subscriber(context, ZMQ_SUB);
> >>> > subscriber.connect("tcp://localhost:5563");
> >>> > Sleep(1000);
> >>> > subscriber.setsockopt(ZMQ_SUBSCRIBE, "A");
> >>> > Sleep(1000);
> >>> >
> >>> > And it stiil does not work.
> >>> >
> >>> > I also tried with the ZMQ version 4.2.0, same result.
> >>> >
> >>> > I forgot to tell that I'm using the static version of ZMQ (with the
> >>> > ZMQ_STATIC preprocessor variable), maybe it has something to do ?
> >>> >
> >>> > Thank you,
> >>> >
> >>> > Kin
> >>> >
> >>> > On Thu, Sep 22, 2016 at 6:28 PM, Dimos Stamatakis <
> dimstamat at gmail.com>
> >>> > wrote:
> >>> >>
> >>> >> That's right. I remember reading this on the instructions on how to
> >>> >> build
> >>> >> a pub-sub system in ZeroMQ. There is limited availability, since as
> >>> >> Ian said
> >>> >> they wanted to build something fast and make it reliable, rather
> than
> >>> >> building something reliable and make it fast.
> >>> >>
> >>> >> Dimos
> >>> >>
> >>> >> On Thu, Sep 22, 2016 at 12:21 PM, Colin Ingarfield
> >>> >> <colin at ingarfield.com>
> >>> >> wrote:
> >>> >>>
> >>> >>> The subscriber connect() call is asynchronous.  It's possible the
> >>> >>> publish
> >>> >>> messages are sent before the subscribe socket connects and
> >>> >>> establishes its
> >>> >>> subscription.
> >>> >>>
> >>> >>> Try sleeping for 100ms or so after the connect call, before the
> loop.
> >>> >>>
> >>> >>>
> >>> >>> On 9/22/16 11:10 AM, Aurélien .... wrote:
> >>> >>>
> >>> >>> Hi,
> >>> >>>
> >>> >>> I'm trying to make a simple PUB / SUB test.
> >>> >>>
> >>> >>> First, I created the publisher, then the subscriber with a message
> to
> >>> >>> subscribe.
> >>> >>>
> >>> >>> Second, I send some messages from the publisher and I try to
> retreive
> >>> >>> them from the subscriber.
> >>> >>>
> >>> >>> The code compiles but the subscriber does not receive any data.
> >>> >>>
> >>> >>> My config is :
> >>> >>> - Windows 7 / Visual Studio 2015
> >>> >>> - Compile in /MTd (debug)
> >>> >>> - ZMQ Version : 4.1.4
> >>> >>>
> >>> >>> Here is the code :
> >>> >>>
> >>> >>> #include "zhelpers.hpp"
> >>> >>>
> >>> >>> void TestPubSub()
> >>> >>> {
> >>> >>> zmq::context_t context;
> >>> >>> zmq::socket_t publisher(context, ZMQ_PUB);
> >>> >>> zmq_bind(publisher, "tcp://*:5563");
> >>> >>>
> >>> >>> zmq::socket_t subscriber(context, ZMQ_SUB);
> >>> >>> subscriber.connect("tcp://localhost:5563");
> >>> >>> subscriber.setsockopt(ZMQ_SUBSCRIBE, "A");
> >>> >>>
> >>> >>> while (1) {
> >>> >>> //  Write two messages, each with an envelope and content
> >>> >>> s_sendmore(publisher, "A");
> >>> >>> s_send(publisher, "We don't want to see this");
> >>> >>> s_sendmore(publisher, "B");
> >>> >>> s_send(publisher, "We would like to see this");
> >>> >>>
> >>> >>> //  Read envelope with address
> >>> >>> std::string addr = s_recv(subscriber); // block here, waiting for
> >>> >>> messages which does not come
> >>> >>> //  Read message contents
> >>> >>> std::string contents = s_recv(subscriber);
> >>> >>> }
> >>> >>> }
> >>> >>>
> >>> >>> int main(int argc, char** argv)
> >>> >>> {
> >>> >>> TestPubSub();
> >>> >>> return 0;
> >>> >>> }
> >>> >>>
> >>> >>> Can you tel me where I'm wrong ?
> >>> >>>
> >>> >>> Thank you very much,
> >>> >>>
> >>> >>> Kin
> >>> >>>
> >>> >>>
> >>> >>> _______________________________________________
> >>> >>> zeromq-dev mailing list
> >>> >>> zeromq-dev at lists.zeromq.org
> >>> >>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>> _______________________________________________
> >>> >>> zeromq-dev mailing list
> >>> >>> zeromq-dev at lists.zeromq.org
> >>> >>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> >>> >>
> >>> >>
> >>> >>
> >>> >> _______________________________________________
> >>> >> zeromq-dev mailing list
> >>> >> zeromq-dev at lists.zeromq.org
> >>> >> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> >>> >
> >>> >
> >>> >
> >>> > _______________________________________________
> >>> > zeromq-dev mailing list
> >>> > zeromq-dev at lists.zeromq.org
> >>> > http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> >>> _______________________________________________
> >>> zeromq-dev mailing list
> >>> zeromq-dev at lists.zeromq.org
> >>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> >>
> >>
> >
> >
> > _______________________________________________
> > zeromq-dev mailing list
> > zeromq-dev at lists.zeromq.org
> > http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20160926/29f587d0/attachment.htm>


More information about the zeromq-dev mailing list