zoukankan      html  css  js  c++  java
  • zmq 三种模型的python实现

    1.Request-Reply模式:

    客户端在请求后,服务端必须回响应

    server:

    #!/usr/bin/python
    #-*-coding:utf-8-*-
    import time
    import zmq
    
    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind("tcp://*:5555")
    
    while True:
        message = socket.recv()
        print(message)
        #time.sleep(1)
        socket.send("server response!")

    client:

    #!/usr/bin/python
    #-*-coding:utf-8-*-
    
    import zmq
    import sys
    
    context = zmq.Context()
    socket = context.socket(zmq.REQ)
    socket.connect("tcp://localhost:5555")
    
    while(True):
        data = raw_input("input your data:")
        if data == 'q':
            sys.exit()
    
        socket.send(data)
    
        response = socket.recv();
        print(response)

    2.Publish-Subscribe模式:

    广播所有client,没有队列缓存,断开连接数据将永远丢失。client可以进行数据过滤。

     server:

    #!/usr/bin/python
    #-*-coding:utf-8-*-
    
    import zmq 
    context = zmq.Context()  
    socket = context.socket(zmq.PUB)  
    socket.bind("tcp://127.0.0.1:5000")  
    while True:  
        msg = raw_input('input your data:') 
        socket.send(msg)

    client:

    #!/usr/bin/python
    #-*-coding:utf-8-*-
    
    import time
    import zmq  
    context = zmq.Context()  
    socket = context.socket(zmq.SUB)  
    socket.connect("tcp://127.0.0.1:5000")
    # 这里设置的是过滤条件,不然无法收到消息 socket.setsockopt(zmq.SUBSCRIBE,
    '') while True: print socket.recv()

    3.Parallel Pipeline模式:

    由三部分组成,push进行数据推送,work进行数据缓存,pull进行数据竞争获取处理。区别于Publish-Subscribe存在一个数据缓存和处理负载。

    当连接被断开,数据不会丢失,重连后数据继续发送到对端。

     

    server:

    #!/usr/bin/python
    #-*-coding:utf-8-*-
    
    import zmq
    
    context = zmq.Context()
    
    socket = context.socket(zmq.PULL)
    socket.bind('tcp://*:5558')
    
    while True:
        data = socket.recv()
        print data

    work:

     1 #!/usr/bin/python
     2 #-*-coding:utf-8-*-
     3 
     4 import zmq
     5 
     6 context = zmq.Context()
     7 
     8 recive = context.socket(zmq.PULL)
     9 recive.connect('tcp://127.0.0.1:5557')
    10 
    11 sender = context.socket(zmq.PUSH)
    12 sender.connect('tcp://127.0.0.1:5558')
    13 
    14 while True:
    15     data = recive.recv()
    16     sender.send(data)

    client:

    #!/usr/bin/python
    #-*-coding:utf-8-*-
    
    import zmq
    import time
    
    context = zmq.Context()
    socket = context.socket(zmq.PUSH)
    
    socket.bind('tcp://*:5557')
    
    while True:
        data = raw_input('input your data:')
        socket.send(data)

    消息结构:
    在每个消息buff前均会自带一个buff长度

  • 相关阅读:
    WebService基于SoapHeader实现安全认证
    js中SetInterval与setTimeout用法
    Fiddler 教程
    jQuery 的 serializeArray()、serialize() 方法
    Javascript中Array.prototype.map()详解
    MS DOS 命令大全
    Chrome的JS调试工具
    jquery插件之DataTables 参数介绍
    C#中的Params、ref、out的区别
    C#记录日志、获取枚举值 等通用函数列表
  • 原文地址:https://www.cnblogs.com/callyblog/p/10394625.html
Copyright © 2011-2022 走看看