보통 통신에서는 송/수신으로 나뉜다. MQTT에서는 발행인/구독자로 나뉜다.
MQTT 모듈 설치
# npm install mqtt -save
MQTT 모듈 세팅
var mqtt = require('mqtt');
const options = {
host: '127.0.0.1',
port: 1883
};
const client = mqtt.connect(options);
기본 예제
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://test.mosquitto.org')
client.on('connect', function () {
client.subscribe('presence', function (err) {
if (!err) {
client.publish('presence', 'Hello mqtt')
}
})
})
client.on('message', function (topic, message) {
// message is Buffer
console.log(message.toString())
client.end()
})
mqtt.connect 브로커 연결 세팅
기본 세팅은 아래와 같다. 단순하게 옵션 없이 url만 입력이 가능하다.
const client = mqtt.connect(url, options);
옵션부도 필수는 아니다. 옵션은 브로커와 연결할 때 설정될 속성들이다. broker에 따라 username, password를 요구하는 브로커가 있다면 자바스크립트 객체를 생성해 옵션을 작성하고 넣어주면 된다.
const options = {
host: '127.0.0.1',
port: 8883,
protocol: 'mqtt',
username:"saii42",
password:"password",
};
const client = mqtt.connect(options);
connect - 브로커 연결 부
브로커와 연결됐을 때 실행되는 메소드다.
client.on("connect", function () => {
console.log("connected");
}
subscribe 구독
브로커에 구독을 하려면 client.subscribe 메소드를 사용하면 된다. 물론 토픽이 배열이나 객체도 가능하다. 나도 자주 사용하지 않을 것 같아서 맨 아래 npm 링크를 참조하면 된다. 보통은 connect 할 시 구독을 한다.
client.subscribe(topic/topic array/topic object, [options], [callback])
message - 메세지 수신부
구독을 했다면 메시지가 왔을 때 message 이벤트로 리스너를 만들어 처리한다. 보통 문자열이 전송되기 때문에 구분 문자(/, \...)를 두어 구분하여 사용하면 된다. 구분 문자를 사용하여 여러개의 데이터를 문자열로 전송할 때 주의할 점은 해당 메시지 안에 구분 문자를 사용하면 안된다. 예를 들어 해당 데이터가 암호화가 되면 특수문자도 포함된다. 그렇기 때문에 여러개로 인식되니 주의 하자.
client.on('message', async function (topic, message) {
var _message = message.toString().split('/');
})
publist - 메시지 전송
기본 예제는 아래와 같다. 보통 옵션이 없다면 topic과 message만 보내면 된다.
client.publish(topic, message, [options], [callback])
옵션과 콜백은 선택사항이다. 옵션은 retain message flag나 qos 등을 설정할 수 있다.
var options = {
retain:true,
qos:1
};
client.publish(topic, message, options)
'IT > Node.js' 카테고리의 다른 글
[Node.js] 동기(Synchronous) / 비동기(Asynchronous) async / await / Promise (0) | 2021.06.01 |
---|---|
[Node.js] 배열의 N번째부터 M번째까지 합치는 함수 (0) | 2021.05.25 |
[Node.js] CoAP Server Listener (0) | 2021.05.20 |
[Node.js] CoAP Client (0) | 2021.05.18 |
[Node.js] Redis Key 만료 - N초 후 삭제 (expire) (0) | 2021.05.13 |