보통 통신에서는 송/수신으로 나뉜다. 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)

 

https://www.npmjs.com/package/mqtt#client

+ Recent posts