반응형
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()
- run 함수에서 Reply 타입으로 socket 을 생성한다.
- 생성된 socket 으로 3000번 포트에 bind 한다.
- 생성된 socket 에 message 가 도착하면 process 함수에서 처리한다.
- 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;
}
- ZMQ_REQ 타입으로 socket 을 생성한다.
- 생성된 socket 으로 3000번 포트에 연결한다.
- 생성된 socket 으로 hello 라는 메시지를 전송한다.
- 생성된 socket 에서 메시지를 수신한다.
전체 코드는 아래 makepluscode github 에서 확인한다.
https://github.com/makepluscode/message-broker-examples/tree/main/004-zeromq-server-nodejs-client-c
관련자료
본 예제에서 사용된 코드는 대부분 ZeroMQ 오픈소스의 예제를 가져와서 수정했다.
반응형
'프로그래밍 > IoT' 카테고리의 다른 글
ZeroMQ 메시지브로커 C++ 예제 (0) | 2022.12.03 |
---|---|
Node.js 로 구현한 ZeroMQ 통신 (0) | 2022.12.03 |
ZeroMQ 메시지브로커 C# C언어 예제 (0) | 2022.12.03 |