Skip to content

ZMQ DEMO 请求应答模式

Published: at 04:22 PM | 2 min read

请求应答模式

介绍

这是最基本的一个模式,很常用,一个请求一个应答,发送和接收必须配对。

示例说明

客户端发送一个字符串,然后接收服务端的应答;
服务端收到字符串后将其转换为大写返回给客户端;

代码

客户端

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

int main()
{
    zmq::context_t context(1);
    zmq::socket_t socket(context, ZMQ_REQ);
    socket.connect("tcp://127.0.0.1:7733");

    std::string msg("hello");
    socket.send(zmq::const_buffer(msg.c_str(), msg.size()));
    std::cout << "request:" << msg << std::endl;

    zmq::message_t recv_msg;
    socket.recv(recv_msg);
    std::cout << "response:" << recv_msg.to_string() << std::endl;
    
    system("pause");
    return 0;
}

服务端

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

int main()
{
    zmq::context_t context(1);
    zmq::socket_t socket(context, ZMQ_REP);
    socket.bind("tcp://127.0.0.1:7733");
    while (1) {
        try {
            zmq::message_t msg;
            socket.recv(msg);

            std::string str_msg = msg.to_string();
            std::cout << "recv:" << str_msg << std::endl;
            std::transform(str_msg.begin(), str_msg.end(), str_msg.begin(), ::toupper);

            zmq::const_buffer buffer(str_msg.c_str(), str_msg.size());
            socket.send(buffer);
            std::cout << "send:" << str_msg << std::endl;
        } catch (zmq::error_t &e) {
            std::cerr << "error:" << e.what() << std::endl;
            zmq_sleep(1);
        }
    }
    return 0;
}