본문 바로가기
프로그래밍/IoT

ZeroMQ 메시지브로커 NodeJS & C

by makepluscode 2022. 12. 30.
반응형

NodeJS & C 로 구현한 ZeroMQ 메시지브로커

ZeroMQ(ØMQ, 0MQ, zmq) 는 메시지브로커를 구현한 라이브러리 이다. ZeroMQ 는 C, C++, Javascript 등, 다양한 버전으로 배포된다. 프로세스 내, 프로세스 간, TCP 및 멀티캐스트 환경에서 메시지를 전달하는 소켓을 제공한다. 임베디드 개발 과정에서 간단한 메시지브로커 라이브러리가 필요할때 추천되는 라이브러리 이다.이 글은 ZeroMQ 메시지브로커의 Server 와 Client 를 Node.js 와 C 로 구현한 예제를 정리한 내용이다.

 

본 예제는 ZeroMQ 의 오픈소스 예제 코드를 참고하였습니다.

ZeroMQ Server - Node.js

Server 의 역할

Server 는 특정 포트에 Binder 되어서 Client 를 기다린다. Client 가 연결 되면, Socket 이 활성화 된다. 정해진 시나리오에 따라서 데이터를 주거나 받을 수 있다.

NodeJS 로 구현한 Server

예제에서 사용할 zeromq 패키지를 설치한다.

npm install zeromq@6.0.0-beta.16
const zmq = require("zeromq")

function process(msg, callback) {
  console.log("server starts to process msg : " + msg)

  setTimeout(function() {
    // do process here
    callback(true)
  }, 1000);
}

async function run() {
  const socket = new zmq.Reply

  await socket.bind("tcp://*:3000")

  for await (const [msg] of socket) {
    process(msg, function(result){
      socket.send("ok")
    });
  }
}

run()
  1. run 함수에서 Reply 타입으로 socket 을 생성한다.
  2. 생성된 socket 으로 3000번 포트에 bind 한다.
  3. 생성된 socket 에 message 가 도착하면 process 함수에서 처리한다.
  4. process 함수에서 callback 을 통해 'ok' 를 반송한다.

ZeroMQ Client - C

Client 의 역할

Client 는 특정 포트로 Server 에 연결을 시도한다. Server 와 연결이 되면, Socket 을 통해서 데이터를 주거나 받을 수 있다.

C 로 구현한 Client

#include <zmq.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>

int main(void)
{
  void *context = zmq_ctx_new();
  void *requester = zmq_socket(context, ZMQ_REQ);

  zmq_connect(requester, "tcp://localhost:3000");

  int request_nbr;

  char buffer[10];

  zmq_send(requester, "hello", 5, 0);

  memset(buffer, 0x00, sizeof(buffer));
  zmq_recv(requester, buffer, sizeof(buffer), 0);
  printf("client received %s\n", buffer);

  zmq_close(requester);
  zmq_ctx_destroy(context);
  return 0;
}
  1. ZMQ_REQ 타입으로 socket 을 생성한다.
  2. 생성된 socket 으로 3000번 포트에 연결한다.
  3. 생성된 socket 으로 hello 라는 메시지를 전송한다.
  4. 생성된 socket 에서 메시지를 수신한다.

전체 코드는 아래 makepluscode github 에서 확인한다.

https://github.com/makepluscode/message-broker-examples/tree/main/004-zeromq-server-nodejs-client-c

관련자료

본 예제에서 사용된 코드는 대부분 ZeroMQ 오픈소스의 예제를 가져와서 수정했다.

https://zeromq.org/

 

ZeroMQ

An open-source universal messaging library

zeromq.org

반응형

'프로그래밍 > IoT' 카테고리의 다른 글

ZeroMQ 메시지브로커 C++ 예제  (0) 2022.12.03
Node.js 로 구현한 ZeroMQ 통신  (0) 2022.12.03
ZeroMQ 메시지브로커 C# C언어 예제  (0) 2022.12.03