ZeroMQ

zmq 三種模式json

第一種:
    Request-Reply(半雙工)模式:
    #半雙工,多客戶端多客戶端,一問一答模式,多客戶端能夠經過中間設置代理
    #
    #server端
    import zmq
    content = zmq.Context()
    sock = content.socket(zmq.REP)
    sock.bind("tcp://127.0.0.1:8017")socket

    while True:
        receive = sock.recv()tcp

        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()server

第二種:
    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")ip

    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)ci

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

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

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

    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()

相關文章
相關標籤/搜索