Networks/MQTT

MQTT 발행(publish)과 구독(subscribe)

iKay 2018. 10. 7. 18:59
반응형

  MQTT 발행(publish)과 구독(subscribe)을 통해 데이터를 주고 받는다. publish는 데이터를 보내는 것, subscribe는 데이터를 받는 것이다. MQTT의 publish, subscribe를 테스트 해보기 위해 다음과 같이 단방향 통신 구조로 테스트 해 볼 것이다. 이것을 응용하면 양방향 통신, 다수의 클라이언트와 통신이 가능하다. 이번에도 broker로서 mosquitto를, client로서 mosquitto-clients를 사용해 Ubuntu Server(18.04) CLI에서 테스트한다.  

 

  잠시 HTTP와 MQTT를 비교해보자. 이 부분은 참고만 하길 바라며 MQTT가 HTTP보다 더 낫다는 것으로 오해하지 않기를 바란다. HTTP와 MQTT는 목적, 용도가 다를 뿐이다. HTTP는 서버가 client에게 어떤 상태의 변화를 실시간으로 전송하지 않으면, 그 client는 request를 하기 전까지 서버가 변화한 상태값을 알 수 없다. 만약, client가 서버의 변화하는 상태 값을 실시간으로 얻기 위해서는 주기적으로 polling, 즉 매 주기마다 request를 해야할 것이다. 이 방법은 낭비일 수 있고 비 효율적일 수도 있다. 그러나, MQTT는 client가 특정 topic을 subscribe하고 있으면, MQTT broker를 통해 실시간으로 publish 되는 topic의 특정 resource를 실시간으로 받을 수 있다. 즉, MQTT는 HTTP에 비해 실시간으로 변화하는 값을 받아야 할 경우, 이것을 구현하가기 쉽고 더 효율적이다. 많은 수의 resource를 동시에 전송해야 하는 경우 더욱 효과적이다. 예를 들어, 다수의 client에게 message를 전송해야 할 경우 HTTP보다 MQTT가 더 효율적이는 것이다. 그 외에 더 비교할 점이 많지만 이 둘의 바교는 다음에 포스팅 해보도록 하겠다.

 

 

  다시 돌아와서, 설명을 간단히 하기 위해 192.168.0.16 서버의 마지막 IP 바이트만으로 구분해 16번 서버라 부르겠고, 나머지 서버를 15번, 17번 서버라 부르겠다. 먼저 16번 서버에서 broker를 실행시키자. 실행 후 별다른 명령어는 보이지 않고 프롬프트만 깜빡거린다. 

 

# 16번 server
kay@ubuntu:~$ sudo mosquitto -c /etc/mosquitto/mosquitto.conf

       

  이제 15번 서버에서 'things/1/temperature' 라는 topic을 subscribe해보자. subscribe 하는 명령어는 아래와 같으며, 옵션으로 -h 는 broker 주소, -t는 topic을 뜻한다. 

 

# 15번 server
kay@ubuntu:~$ mosquitto_sub -h '192.168.0.16' -t 'things/1/temperature'

  

  그 후 17번 서버에서 publish 해보자. 명령어는 아래와 같으며, -h 옵션은 broker주소, -t는 topic 그리고 -m은 publish할 message를 뜻한다. 'things/1/temperature'라는 topic에 '36.5, 37.0, 38.5'라는 데이터를 3 번에 걸쳐 보내보자. 그러면 실시간으로 15번 서버의 터미널에 순서대로 36.5, 37.0, 38.5' 라는 문자가 보일 것이다. 

 

 

# 17번 server
kay@ubuntu:~$ mosquitto_pub -h '192.168.0.16' -t 'things/1/temperature' -m '36.5'
kay@ubuntu:~$ mosquitto_pub -h '192.168.0.16' -t 'things/1/temperature' -m '37.0'
kay@ubuntu:~$ mosquitto_pub -h '192.168.0.16' -t 'things/1/temperature' -m '38.5'
kay@ubuntu:~$

 

 

 
# 15번 server
kay@ubuntu:~$ mosquitto_sub -h '192.168.0.16' -t 'things/1/temperature'
36.5
37.0
38.5

 

  이렇게 broker를 중앙에 두고 두 클라이언트가 단방향으로 'things/1/temperature' 라는 topic으로 String을 보내고 받을 수 있다.  

반응형

'Networks > MQTT' 카테고리의 다른 글

MQTT server(broker) 설치하기  (0) 2017.12.23
MQTT란?  (0) 2017.10.21