---
# System prepended metadata

title: MQTT Basic workflow
tags: [mqtt, realtime]

---

---
title: 'MQTT Basic workflow'
disqus: hackmd
---


MQTT Basic workflow
===
## Table of Contents

[TOC]

## 1. Problems

Currently we using RESTful API and it's have too many problems

1. Using setInterval for get near-realtime data.
2. It's not actual realtime
3. Waste network resources for get the same data
4. Cannot handle big number of devices

## 2. Scope

### 2.1 What's MQTT?

### 2.2 Where we will apply MQTT?

We will apply MQTT to Server, Web, Mobile app client.

### 2.3 Why we should apply MQTT?

If we want to bring more value to user, improve the user experience, we need to apply MQTT, it's also better for the system.

### 2.4 When we will apply MQTT?

As soon as possible, we will apply to the new project, shouldn't apply to on-going proect.


## Workflows

```sequence
Device->MQTT\nServer: Connect via MQTT protocol
Web/Mobile\nClient->MQTT\nServer: Connect via WSS
Web/Mobile\nClient->MQTT\nServer: Subscribe to topic: /devices/+
Device-->MQTT\nServer: Publish message to topic\n/devices/{device_id}
MQTT\nServer-->Web/Mobile\nClient: Receive the message
Web/Mobile\nClient->Web/Mobile\nClient: Parse to JSON
Web/Mobile\nClient->Web/Mobile\nClient: Update device information\non Map
```


## What's important of MQTT system


:::info
1. Topic format
2. Optimize message data
3. Choose QoS for message
4. Build MQTT server
5. Define messageg format
:::

###### tags: `mqtt` `realtime`
