MQTT

Falcon·2021년 4월 27일
1
post-thumbnail

🎯 Goal

10,000명의 동시접속자에게 1.5초 (1,500ms) 내로 메시지가 전달되는 채팅 서버 구축

  • MQTT 프로토콜의 특징을 이해하여 필요할 때 쓸 수 있다. (When to use)
  • Node.js , Websocket을 그대로 적용할 수 있다. (application)
  • MQTT 프로토콜에도 암호화를 적용하여 안전한 통신이 이뤄지게 할 수 있다. (Configuration)
  • 채팅 서버에 Redis를 적용하여 채널을 관리할 수 있다.

MQTT 이름부터 알려줘봐

Message Queueing Telemetry Transport

When to use?

(1) http 보다 가벼운, M2M (Machine to Machine)

Packet SizeHTTP 1.1MQTT
Minimum26 bytes2 bytes
Maximum1 ~ 4GB256 MB

🔺 HTTP의 경우 WebBrowser 별로 패킷 사이즈 제한이 상이하다.

사물인터넷(IoT) 즉 기기간의 (드론이라던가, 리모컨이라던가..) 통신을 위해 고안된 프로토콜이기 때문에 더 가볍다. ➡️ (더 빨라지기 쉽다)

(2) pub/sub 메시지 패턴

내가 눈독 들인 이유인데, 아프리카 방송이든 게임이든 각 방, 채널을 나눈다.
publish 한다는 것은 발행한다는 거고
subscribe 는 구독 (이정도 영어는 다 아는데..?)

내가 구독한 '토픽(채널, 방, 주제)'에 만 메시지를 주고받을 수 있게 분리한다.

(3) 비정상 종료 알림

별거 아니라고 생각할 수도 있는데
채팅이나 게임서버에서 누군가 '종료 (나감)'을 정확하게 표시하는 것이 중요할 수 있다.
롤에서 우리팀 한명이 강제종료로 탈주했는데 '나감'처리가 안된다고 생각해봐라. (어머 어디?)

비정상 종료시 등록해두었던 토픽에 종료 사실을 전파한다.

Specific Characteristics

3가지 QoS

LevelDescription
0한번 보내고 잊어버림 (뒤의 결과는 신경쓰지 않음)
1ACK 확인 응답 메시지 수신까지 송신 재시도 (중복 송신 가능)
2정확히 '한 번' 메시지가 전달되도록 HandShake 포함

🔗 Reference

oasis-open MQTT Document

profile
I'm still hungry

0개의 댓글