# 通訊協定 MQTT之淺入~~深~~出 --- ## 協定? > 甚麼叫協定 ---- ![](https://i.imgur.com/LksjqC6.png) --- ### 通訊協定 > 很多東西通訊共識 ---- 角色換一下就知道了 ![](https://i.imgur.com/B8gY8VN.png) --- ### 我們來看一下常見的軟體通訊協定 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個字元 ---- ![](https://i.imgur.com/j6Kf3SO.png) ---- ### Pub Broker Sub ![](https://i.imgur.com/0pWqeCA.jpg) ---- 發布者可以一次發給多個訂閱主題的人 訂閱也可以訂閱許多主題 ---- ### 內容 Data > 可以傳送XML,JSON,String,Bin(utf-8編碼) Topic: /message/FKT ```json= { "message":"我傳送了訊息" } ``` --- ## MQTT Features ---- ### MQTT主動 ![](https://i.imgur.com/j57ehTK.png) ---- ### MQTT透過Topic廣播 ![](https://i.imgur.com/4PyzpU5.png) [資料來源](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}]"}
    114 views