[zeromq-dev] Publisher receiving message it publishes

Ronald Swain proj_symbian at live.com
Thu Apr 5 05:00:55 CEST 2012


Can any body guide me on this problem.

Thanks Ronald

From: proj_symbian at live.com
To: zeromq-dev at lists.zeromq.org
Date: Wed, 4 Apr 2012 10:59:13 +0200
Subject: [zeromq-dev] Publisher receiving message it publishes








Hello Guys,

Thanks for your replies that all worked great. :-)

I have one more question with some different topic:

I have PUB/SUB system with a zmq FORWARDER device, and there all clients have the capability of sending and receiving , so what is happening, that whenever a single client publishes a message all other subscriber get it which is correct, but also my publisher is a subscriber too, so my publisher also gets that message, i want the publisher to ignore that.

Can anybody help me how i can proceed with that ??

Regards,
Ronald 
From: dan.fairs at gmail.com
Date: Tue, 3 Apr 2012 10:44:17 +0100
To: zeromq-dev at lists.zeromq.org
Subject: Re: [zeromq-dev] How to make recv() non blocking



I got your way of using NOBLOCK, but can you brief me more about how i can use zmq.poll here using the POLLIN and POLLOUT events.

Here's an (edited) highlight from our codebase:
        control_socket = self.context.socket(zmq.SUB)        control_socket.setsockopt(zmq.SUBSCRIBE, '')        control_socket.connect(self.control_addr)
        timer_socket = self.context.socket(zmq.SUB)        timer_socket.setsockopt(zmq.SUBSCRIBE, '')        timer_socket.connect('inproc://timer')
        poller = zmq.Poller()        poller.register(control_socket, zmq.POLLIN)        poller.register(timer_socket, zmq.POLLIN)
        while not self.stop:            socks = dict(poller.poll(500))            if socks.get(control_socket) == zmq.POLLIN:                message = control_socket.recv()                self.handle_control(message)            if socks.get(timer_socket) == zmq.POLLIN:                message = timer_socket.recv()                self.handle_timer(message)            self.logger.debug(u'Heartbeat')
        control_socket.close()        timer_socket.close()
Hope that helps. It's very similar to the example in the zguide, to be honest, make sure you have a good read of that.
Note that this is only really appropriate if you want to check multiple sockets. If you've just got the one socket, something like this might be more appropriate:
        while not self.stop:            try:                raw_message = self.pull_socket.recv(zmq.NOBLOCK)            except zmq.ZMQError as e:                if e.errno != zmq.EAGAIN:                    raise                time.sleep(.5)	        self.logger.debug(u'Heartbeat')            else:                self.sync_handle(raw_message)

Cheers,Dan--
Dan Fairs | dan.fairs at gmail.com | www.fezconsulting.com



_______________________________________________
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/20120405/0bdde923/attachment.htm>


More information about the zeromq-dev mailing list