[c++] ZeroMQ 양방향 통신

ZeroMQ는 가벼우면서도 강력한 메시징 라이브러리로, 다양한 언어와 환경에서 효율적인 통신을 지원합니다. 이번 포스트에서는 C++을 사용하여 ZeroMQ를 통해 양방향 통신을 설정하는 방법에 대해 알아보겠습니다.

ZeroMQ 요약

ZeroMQ는 소켓을 사용하여 다양한 프로토콜과 패턴을 지원합니다. 다양한 메시지 전달 방식을 지원하며, 메모리 동기화 및 네트워크 통신을 위한 강력한 기능을 제공합니다.

ZeroMQ 설치

우선, ZeroMQ를 시스템에 설치해야 합니다. Linux에서는 다음과 같이 설치할 수 있습니다.

sudo apt-get install libzmq3-dev

Windows나 macOS에서는 공식 웹사이트에서 바이너리 또는 소스 코드를 다운로드하여 설치할 수 있습니다.

C++에서 ZeroMQ 사용하기

C++ 코드에서 ZeroMQ를 사용하기 위해서는 먼저 필요한 헤더 파일을 include 해야 합니다.

#include <zmq.hpp>

그리고 ContextSocket 객체를 생성하여 소켓 통신을 설정합니다. 서버와 클라이언트 간의 양방향 통신을 위해서는 REQ-REP 패턴을 사용할 수 있습니다.

서버는 다음과 같이 소켓을 바인딩합니다.

zmq::context_t context(1);
zmq::socket_t socket(context, zmq::socket_type::rep);
socket.bind("tcp://*:5555");

클라이언트는 다음과 같이 소켓을 연결합니다.

zmq::context_t context(1);
zmq::socket_t socket(context, zmq::socket_type::req);
socket.connect("tcp://localhost:5555");

양방향 통신 예제

서버와 클라이언트 사이의 간단한 양방향 통신 예제를 통해 ZeroMQ를 적용하는 방법을 보여드리겠습니다.

서버 코드:

zmq::message_t request;
socket.recv(request, zmq::recv_flags::none);
std::string request_str = std::string(static_cast<char*>(request.data()), request.size());
std::cout << "Received request: " << request_str << std::endl;

zmq::message_t reply(5);
memcpy(reply.data(), "World", 5);
socket.send(reply, zmq::send_flags::none);

클라이언트 코드:

zmq::message_t request(5);
memcpy(request.data(), "Hello", 5);
socket.send(request, zmq::send_flags::none);

zmq::message_t reply;
socket.recv(reply, zmq::recv_flags::none);
std::string reply_str = std::string(static_cast<char*>(reply.data()), reply.size());
std::cout << "Received reply: " << reply_str << std::endl;

마무리

이제 여러분은 C++으로 ZeroMQ를 사용하여 양방향 통신을 설정하는 방법을 알게 되었습니다. ZeroMQ의 간편한 API와 풍부한 패턴 지원을 통해 강력한 통신 솔루션을 구현할 수 있습니다.

더 많이 배우고 싶다면, 공식 문서를 참고해 보세요: ZeroMQ 공식 문서.

Happy coding! 🚀