示例#1
0
    def test_send_recv(self):
        """ Check sending and receiving """

        def onListen(p, s, d):
            ds = s.connect(self.factory)
            ds.addCallback(onConnect, p, d)

        def onConnect(s, p, d):
            s.subscribe("tag")
            reactor.callLater(0.2, performTest, s, p, d)

        def performTest(s, p, d):
            p.publish("xyz", "different-tag")
            p.publish("abcd", "tag1")
            p.publish("efgh", "tag2")
            reactor.callLater(0.2, check, s, d)

        def check(s, d):
            result = getattr(s, "messages", [])
            expected = [["tag1", ["abcd"]], ["tag2", ["efgh"]]]
            self.failUnlessEqual(result, expected, "Message should have been received")
            d.callback(True)

        s = ZmqTestSubConnection(ZmqEndpoint(ZmqEndpointType.connect, "ipc://test-sock"))
        p = ZmqPubConnection(ZmqEndpoint(ZmqEndpointType.bind, "ipc://test-sock"))

        d = defer.Deferred()

        ds = p.listen(self.factory)
        ds.addCallback(onListen, s, d)

        return d
示例#2
0
    def test_send_recv_multiple_endpoints(self):
        """ Check send and receive using multiple endpoint """

        def onP1Listen(p1, p2, s, d):
            dp2 = p2.listen(self.factory)
            dp2.addCallback(onP2Listen, p1, s, d)

        def onP2Listen(p2, p1, s, d):
            ds = s.connect(self.factory)
            ds.addCallback(onConnect, p1, p2, d)

        def onConnect(s, p1, p2, d):
            s.subscribe("")
            reactor.callLater(0.2, perform_test, s, p1, p2, d)

        def perform_test(s, p1, p2, d):
            p1.publish("111", "tag1")
            p2.publish("222", "tag2")
            reactor.callLater(0.2, check, s, d)

        def check(s, d):
            result = getattr(s, "messages", [])
            expected = [["tag2", ["222"]], ["tag1", ["111"]]]
            self.failUnlessEqual(result, expected, "Message should have been received")
            d.callback(True)

        s = ZmqTestSubConnection(
            ZmqEndpoint(ZmqEndpointType.connect, "tcp://127.0.0.1:5556"),
            ZmqEndpoint(ZmqEndpointType.connect, "inproc://endpoint"),
        )
        p1 = ZmqPubConnection(ZmqEndpoint(ZmqEndpointType.bind, "tcp://127.0.0.1:5556"))
        p2 = ZmqPubConnection(ZmqEndpoint(ZmqEndpointType.bind, "inproc://endpoint"))

        d = defer.Deferred()

        ds = p1.listen(self.factory)
        ds.addCallback(onP1Listen, p2, s, d)

        return d
示例#3
0
文件: psenvpub.py 项目: claws/tx0mq
if __name__ == '__main__':

    def publish(publisher):
        # Write two messages, each with an envelope and content
        first_message = ["A", "We don't want to see this"] 
        second_message = ["B", "We would like to see this"] 
        third_message = ["BB", "We might see this"] 
        print "publishing ..." 
        publisher.publish(first_message)
        publisher.publish(second_message)
        publisher.publish(third_message)
        reactor.callLater(1, publish, publisher)

    def onListen(publisher):
        print "Publisher connected"
        publisher.setSocketOptions({constants.LINGER:0})
        publish(publisher)

    # Prepare our context and publisher
    endpoint = ZmqEndpoint(ZmqEndpointType.bind, "tcp://*:5563")
    publisher = ZmqPubConnection(endpoint)
    deferred = publisher.listen(ZmqFactory())
    deferred.addCallback(onListen)
    reactor.run()