[c++] ZeroMQ 동기식 메시지 송수신

ZeroMQ는 메시지 큐를 사용하여 데이터를 송수신하는 데 널리 사용되는 고성능 라이브러리입니다. 특히 C++에서 ZeroMQ를 사용하여 동기식 메시지 송수신을 구현하는 방법에 대해 알아보겠습니다.

ZeroMQ 설치

우선, ZeroMQ를 사용하기 위해서는 해당 라이브러리를 시스템에 설치해야 합니다. 다음은 Linux 환경에서의 설치 방법입니다.

sudo apt-get update
sudo apt-get install libzmq3-dev

ZeroMQ로 동기식 송수신 구현

ZeroMQ를 사용하여 동기식 메시지 송수신을 구현하기 위해서는 클라이언트와 서버 간의 통신 프로토콜을 정의해야 합니다. 보통 “REQ (요청)”과 “REP (응답)” 패턴이 사용됩니다.

클라이언트 (요청) 코드

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

int main() {
    zmq::context_t context(1);
    zmq::socket_t socket(context, ZMQ_REQ);

    socket.connect("tcp://localhost:5555");

    std::string request_msg = "Hello, ZeroMQ!";
    zmq::message_t request(request_msg.size());
    memcpy(request.data(), request_msg.c_str(), request_msg.size());
    socket.send(request);

    zmq::message_t reply;
    socket.recv(&reply);

    std::string reply_msg(static_cast<char*>(reply.data()), reply.size());
    std::cout << "Received reply: " << reply_msg << std::endl;

    return 0;
}

서버 (응답) 코드

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

int main() {
    zmq::context_t context(1);
    zmq::socket_t socket(context, ZMQ_REP);

    socket.bind("tcp://*:5555");

    while (true) {
        zmq::message_t request;
        socket.recv(&request);

        std::string request_msg(static_cast<char*>(request.data()), request.size());
        std::cout << "Received request: " << request_msg << std::endl;

        std::string reply_msg = "Hello, Client!";
        zmq::message_t reply(reply_msg.size());
        memcpy(reply.data(), reply_msg.c_str(), reply_msg.size());
        socket.send(reply);
    }

    return 0;
}

마무리

이제 위의 코드를 참고하여 클라이언트와 서버의 동기식 메시지 송수신을 구현할 수 있습니다. ZeroMQ는 간편한 인터페이스를 제공하며, 다양한 통신 패턴을 지원하여 다른 용도에도 활용할 수 있습니다.

더 많은 정보를 원하시거나 ZeroMQ에 대해 더 자세히 알아보고 싶으시면 공식 문서를 참고하시기 바랍니다.

ZeroMQ 공식 문서