ZeroMQ

zmq 三种模式

第一种:
    Request-Reply(半双工)模式:
    #半双工,多客户端多客户端,一问一答模式,多客户端可以通过中间设置代理
    #
    #server端
    import zmq
    content = zmq.Context()
    sock = content.socket(zmq.REP)
    sock.bind("tcp://127.0.0.1:8017")

    while True:
        receive = sock.recv()

        print receive
        if receive == str(1):
            sock.send("ok")
        else:
            sock.send("success")
    #client端
    #半双工,一问一答,通信协议server  REP(reply),client REQ(request)
    import zmq
    content = zmq.Context()
    sock = content.socket(zmq.REQ)
    sock.connect("tcp://127.0.0.1:8017")

    while True:
        sock.send(raw_input(">>"))
        print sock.recv()

第二种:
    Publish-Subscribe(广播订阅)模式:
    #server端
    #广播,服务端发送,客户端被动接收,通信协议server PUB,client SUB,客户端可以设置过滤条件来是否接收广播信息
    import zmq
    content = zmq.Context()
    sock = content.socket(zmq.PUB)
    sock.bind("tcp://127.0.0.1:8017")

    while True:
        sock.send(raw_input(">>"))
    #client端
    #广播,被动接受,setsockopt 设置过滤,zmq.SUBSCRIBE 过滤主题也就是内容的头部为test的才接收
    import zmq
    content = zmq.Context()
    sock = content.socket(zmq.SUB)
    sock.connect("tcp://127.0.0.1:8017")
    sock.setsockopt(zmq.SUBSCRIBE,"test")
    while True:
        print sock.recv()
        
第三种:
    Parallel Pipeline(管道)模式
    #server push,work pull,然后在push
    #client pull
    #server端
    import time
    import zmq
    context = zmq.Context()
    socket = context.socket(zmq.PUSH)

    socket.bind('tcp://*:5557')

    while True:
        data = raw_input('input your data:')
        socket.send(data)
    
    #work端
    import zmq
    context = zmq.Context()

    recive = context.socket(zmq.PULL)
    recive.connect('tcp://127.0.0.1:5557')

    sender = context.socket(zmq.PUSH)
    sender.connect('tcp://127.0.0.1:5558')

    while True:
        data = recive.recv()
        sender.send(data)
    
    #client端
    import zmq
    context = zmq.Context()

    socket = context.socket(zmq.PULL)
    socket.bind('tcp://*:5558')

    while True:
        data = socket.recv()
        print data

一二混搭:
    #server端 混搭时一定要记得第一种模式的一问一答模式(客户端发出消息,服务端接收并回应,然后客户端在接收消息)
    import zmq
    content = zmq.Context()
    sock = content.socket(zmq.PUB)
    sock.bind("tcp://127.0.0.1:8018")

    receive = content.socket(zmq.REP)
    receive.bind("tcp://127.0.0.1:8019")

    while True:
        send = raw_input(">>")
        sock.send(send)
        data = receive.recv()
        print eval(data)
        receive.send("ok")
        
    #client端
    import zmq
    import  json
    content = zmq.Context()
    sock = content.socket(zmq.SUB)
    sock.connect("tcp://127.0.0.1:8018")
    sock.setsockopt(zmq.SUBSCRIBE,"")

    sender = content.socket(zmq.REQ)
    sender.connect("tcp://127.0.0.1:8019")

    while True:
        receive = sock.recv()
        print receive
        if receive=="test.ping":
            sender_content = "id:\n    true"
        else:
            sender_content = "id:\n    false"
        sender.send(json.dumps(sender_content))
        print sender.recv()

猜你喜欢

转载自my.oschina.net/u/2343310/blog/1626423