Skip to content

ZMQ DEMO push pull 模式

Published: at 04:36 PM | 2 min read

类似如生产者消费者模式,多个消费者可以均衡的消费所有生产出来的东西,比如有100个任务,只有一个消费者它需要消费100次,如果有10个消费者那么每个消费者只需要消费10次,大大提高了效率。

注意:当没有消费者时,生产者是不会生产的(send被阻塞)

生产者代码:

#include "zmq.hpp"
#include <string>
#include <iostream>
#include <algorithm>

int main()
{
    zmq::context_t context(1);
    zmq::socket_t socket(context, zmq::socket_type::push);
    socket.bind("tcp://127.0.0.1:7733");
    
    int number = 0;
    while (1) {
        try {
            std::string str = std::to_string(++number);
            socket.send(zmq::const_buffer(str.c_str(), str.size()));
            std::cout << "push:" << str << std::endl;
            zmq_sleep(1);
        } catch (zmq::error_t &e) {
            std::cerr << "error:" << e.what() << std::endl;
            break;
        }
    }

}

消费者代码:

#include <iostream>
#include <zmq.hpp>

int main()
{
    zmq::context_t context(1);
    zmq::socket_t socket(context, zmq::socket_type::pull);
    
    try {
        socket.connect("tcp://127.0.0.1:7733");
        while (1) {
            zmq::message_t recv_msg;
            socket.recv(recv_msg);
            std::cout << "pull:" << recv_msg.to_string() << std::endl;
        }
    } catch (zmq::error_t e) {
        std::cout << e.what() << std::endl;
    }

    system("pause");
    return 0;
}