Giới thiệu giao thức MQTT
1. Tổng quan
MQTT là viết tắt của MQ Telemetry Transport. Đây là một giao thức theo dạng publish/subscribe, giao thức cực kỳ đơn giản và nhẹ, được thiết kế cho các mạng băng thông thấp, độ trễ cao hoặc không đáng tin cậy. Nó là một giao thức lý tưởng cho các ứng dụng machine-to-machine(M2M) hoặc trên IoT, và cho các ứng dụng di động có băng thông và năng lượng pin ở mức cao.
2. Cách hoạt động
Trong hệ thống sử dụng giao thức MQTT, nhiều node (client) kết nối tới một MQTT server (broker).
Mỗi client sẽ đăng ký một vài kênh (topic), ví dụ như /client/topic1
, /client/topic2
. Quá trình đăng ký này gọi là subscribe.
Client sẽ nhận được dữ liệu khi bất kỳ có một client nào khác gửi dữ liệu vào kênh đã đăng ký. Khi một client gửi dữ liệu tới kênh đó, gọi là publish.
3. Một số khái niệm trong MQTT
MQTT Client
Client thực hiện subscribe đến topic để nhận các message hoặc thực hiện publish message.
MQTT server (broker)
Server chạy các topic, nhận các message từ client và phân phối chúng đến các client subscribe topic đó.
Topic
Là các hàng đợi chứa message cho phép các client trao đổi thông tin và dữ liệu với nhau.
QoS
Là một thỏa thuận giữa publisher và subscriber trong quá trình gửi và nhận message. Có 3 loại QoS:
- QoS 0 At most once: Gửi dữ liệu đúng một lần và không cần xác nhận xem bên nhận đã nhận được dữ liệu hay chưa.
- QoS 1 At least once: Gửi dữ liệu và chờ xem bên nhận có phản hồi lại hay không. Nếu không thấy phản hồi trong khoảng thời gian chỉ định thì bên gửi sẽ tiến hành gửi lại message. Do đó có thể dẫn đến một message được gửi nhiều lần.
- QoS 2 Exactly once: Là mức cao nhất QoS, nó đảm bảo mỗi message chỉ được gửi đúng một lần. Quá trình này trải qua 4 bước bắt tay giữa người gửi và người nhận
Retail
Nếu set retail = true, broker sẽ giữ lại message để khi có client subscribe topic, message đó sẽ được gửi cho client đã subscribe. Mỗi topic sẽ chỉ có 1 retail message.
Message tiếp theo sẽ thay thế cho message trước đó.
4. Demo
Dưới đây mình tạo 1 mqtt broker, sau đó cài đặt thư viện mqtt-client và chạy thử lệnh. Broker mình dùng là mosquitto, chạy ở local.
5. Tài liệu tham khảo
http://mqtt.org/
https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels/
https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/