[c++] ZeroMQ 클라이언트-서버 통신
ZeroMQ는 분산 시스템을 구축하기 위한 고성능 메시지 전달 라이브러리로, C++ 뿐만 아니라 다양한 언어로 구현된다. 여기서는 C++을 사용하여 ZeroMQ를 기반으로 클라이언트-서버 통신을 구축하는 방법을 살펴볼 것이다.
ZeroMQ 개요
ZeroMQ는 메시지 전달을 위한 유연하고 고성능의 오픈 소스 라이브러리로, 다양한 프로토콜을 지원하며 다중 프로그래밍 언어에서 사용할 수 있다. ZeroMQ는 소켓을 사용하여 다른 시스템과 데이터를 교환하는 방식으로 작동한다.
서버 구현
아래는 ZeroMQ를 사용하여 간단한 서버를 구현하는 C++ 코드의 예시이다.
#include <zmq.hpp>
#include <string>
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 requestData = std::string(static_cast<char*>(request.data()), request.size());
// ...
// 클라이언트에 응답 전송
std::string replyData = "Server response";
zmq::message_t reply(replyData.size());
memcpy((void *) reply.data(), (replyData.c_str()), replyData.size());
socket.send(reply);
}
return 0;
}
클라이언트 구현
다음은 C++로 작성된 간단한 ZeroMQ 클라이언트 코드의 예시이다.
#include <zmq.hpp>
#include <string>
int main () {
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REQ);
socket.connect("tcp://localhost:5555");
// 서버에 요청 전송
std::string requestData = "Client request";
zmq::message_t request(requestData.size());
memcpy((void *) request.data(), (requestData.c_str()), requestData.size());
socket.send(request);
// 서버로부터 응답 수신
zmq::message_t reply;
socket.recv(&reply);
std::string replyData = std::string(static_cast<char*>(reply.data()), reply.size());
// 서버의 응답 처리
// ...
return 0;
}
위 코드에서는 ZeroMQ의 zmq.hpp
헤더 파일을 사용하여 ZeroMQ를 초기화하고 서버나 클라이언트 소켓을 생성하고 통신을 수행하는 방법을 보여주고 있다.
시나리오
이제 위의 예시 코드를 기반으로 클라이언트-서버 간의 간단한 요청과 응답을 주고 받는 시나리오를 구현할 수 있다. 이를 통해 ZeroMQ를 사용하여 C++로 클라이언트-서버 통신을 구현하는 기본적인 방법을 이해할 수 있다.
참조:
위와 같은 예시 코드 및 시나리오를 통해 ZeroMQ를 사용하여 C++로 클라이언트-서버 통신을 구현하는 방법을 살펴보았다.