• 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长度

  • 相关阅读:
    【PyTorch】PyTorch使用LMDB数据库加速文件读取
    【PyTorch】PyTorch中的梯度累加
    【数字图像处理】Bilateral Filters
    【PyTorch】计算局部相似矩阵
    【模型压缩】蒸馏算法小结
    【深度聚类】Superpixel Sampling Networks
    【PyTorch】训练器设置
    【语义分割】Dual Attention Network for Scene Segmentation
    【网络架构】Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting
    【任务指标】Matting任务里的Gradient与Connectivity指标
  • 原文地址:https://www.cnblogs.com/callyblog/p/10394625.html
Copyright © 2020-2023  润新知