# 通訊協定 MQTT之淺入~~深~~出
---
## 協定?
> 甚麼叫協定
----

---
### 通訊協定
> 很多東西通訊共識
----
角色換一下就知道了

---
### 我們來看一下常見的軟體通訊協定
1. HTTP
2. WebSocket
3. MQTT
4. AMQP
5. XMPP
還有很多很多哩
---
## HTTP(HyperText Transfer Protocal)
我們先來看看 一個HTTP請求有甚麼東西
----
### 看起來有四樣
```json=
//Request Header
{
"User-Agent":"Mozilla/5.0"
}
//Request Method
POST
//Request URL
/account
//Request Body
{
username:"FKT",
message:"SECRET MESSAGE"
}
```
----
### Header 標頭
格式是JSON用來放一些請求的額外資訊
```json=
{
"User-Agent":"Mozilla/5.0",
"Accept":"...",
"Age":"..."
}
```
----
### Method 方法
```yaml=
GET: 讀取
POST: 新增
PUT: 修改
PATCH: 部分資料修改
DELETE: 刪除
```
----
### URL 路由
> 請求的住址
```yaml=
GET : "google.com" #讀取google.com
```
----
### Data 資料
> 可以是 CSV,XML,JSON,String
```json=
{
"username":"B10923057",
"password":"pa55w0rd"
}
```
---
## MQTT(Message Queue Telemetry Transport)
簡便許多
```json=
//MQTT Header
0101010101
//主題名稱
test
//訊息內容
{
data:{
username:"FKT"
},
_page:{
_next:"https://123.com/10"
}
}
```
----
### 標頭 Header
> 基本的Header使用二進位表示,整個Header長度2Bytes
> 每個數字大小是4bits所以有8個數字
> 而剛提到的HTTP Header可高達8KBs
----
包含
1. 訊息類型
2. 是否副本
3. 傳輸品質
4. 是否保留
----
### 主題 Topic
> 算是MQTT系列通訊協定特有的東西
> 可以想像成Topic就像是你喜歡的Youtuber頻道
> 主題名稱限制65535個字元
----

----
### Pub Broker Sub

----
發布者可以一次發給多個訂閱主題的人
訂閱也可以訂閱許多主題
----
### 內容 Data
> 可以傳送XML,JSON,String,Bin(utf-8編碼)
Topic: /message/FKT
```json=
{
"message":"我傳送了訊息"
}
```
---
## MQTT Features
----
### MQTT主動

----
### MQTT透過Topic廣播

[資料來源](https://medium.com/willhanchen/%E9%97%9C%E6%96%BCmessage-queue%E7%9A%84%E5%B9%BE%E5%80%8B%E5%B8%B8%E8%A6%8B%E5%82%B3%E8%BC%B8%E5%8D%94%E5%AE%9A-d8f1cdf07826)
----
### QoS 服務品質
Quality of Service 個確保網路品質的機制
確保項目
- 頻寬
- 封包遺失率
- 錯誤
- 延遲
----
#### QoS讓MQTT可以用在頻寬受限的地方
由於QoS機制,可以避免關鍵流量無法使用
代表沒有QoS重要資訊是可能遺失的
[延伸閱讀](https://www.tp-link.com/tw/press/news/18635/)
[延伸閱讀2](https://ithelp.ithome.com.tw/articles/10224407)
---
## MQTT ChatRoom Workshop
[專案連結](https://github.com/fan9704/TypeScriptMQTT)
大家可以選擇Fork我的專案再clone自己的Repo
```bash=
git clone git@github.com:fan9704/TypeScriptMQTT.git
```
{"metaMigratedAt":"2023-06-17T22:24:53.230Z","metaMigratedFrom":"YAML","title":"通訊協定 MQTT之淺入~~深~~出","breaks":true,"contributors":"[{\"id\":\"4c8f8799-9dcd-430b-b7bc-8a5156d39d0b\",\"add\":2793,\"del\":412}]"}