您好,登錄后才能下訂單哦!
本篇內容介紹了“mqtt協議有什么作用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
為什么要在 TCP 協議之上再封裝一層 MQTT 協議呢?
舉個例子,如果你要用 TCP 協議做一個即時聊天室,那么你:
首先寫一個服務器程序,監聽某個端口,這樣客戶端就能連接上來了。然后大家就能向你的服務器發送數據了。
但是你不希望隨便誰都能連接你的服務器并且往你的服務器里發東西,于是你寫了一個注冊頁面,讓別人先去注冊賬號,然后他們在客戶端創建連接時發送的第一個TCP報文必須包含了賬號密碼。這樣當你收到第一個報文之后,你就能判斷這個連接是否合法了。
但是發過來的賬號密碼,具體擺在報文什么位置,也得事先約定好吧,不然怎么知道哪幾位是賬號哪幾位是密碼,于是你要求:第一個字節為1,用來告訴你這是一個請求連接的報文。然后第二個字節是報文剩下的長度(這個沒啥異議,粘包處理必備),然后是“餅干熊最帥”這樣一個固定的字符串(沒啥意思,就是開心),后面緊跟著就是賬號,然后是密碼。但是賬號有多長呢,所以賬號第一個字節是賬號的長度,剩下才是賬號內容,這樣就解決了“賬號有多長”的問題了,密碼同理。
如果賬號密碼不匹配就斷開連接并且返回一句“xxxx off”,如果創建連接后半天不發送任何東西也斷開連接。
現在大家的客戶端都連接上來了,你在服務器保存了一個`賬號:socket`的map,能通過任何一個賬號找到這個人的socket并向他發送信息。接下來大家要開始聊天了。
在聊天室中,一個人發送的消息其他人都能收到,所以你添加了聊天室的概念,用戶首先去你的web頁面創建聊天室,然后會得到一個聊天室的ID。然后用戶要加入聊天室,必須先發送一個加入聊天室的報文。然后你要求報文第一個字節為2代表加入聊天室的請求報文,然后是報文剩余長度,然后是聊天室ID,聊天室ID有多長?我們還是用第一個字節代表長度,剩下的內容為具體ID的形式來搞定。
現在有多個用戶加入了聊天室,其中每個用戶又都加入了多個聊天室。假設現在大家在聊天室A中開始聊天。用戶甲向服務器發送消息,然后你發現你不知道這條消息是請求連接還是要加入聊天室還是干啥,所以發送消息也應該定義一種報文類型。于是你要求發送消息的報文的第一個字節為3,那么這個報文是發送到哪個聊天室的呢?于是你要求報文后面跟上聊天室ID,最后是具體的消息內容。
服務器收到第一個字節為3的消息,就知道這是一個聊天消息。然后根據上面帶的聊天室ID以及你在服務器存儲的用戶和聊天室的關系,找到了這個聊天室里的所有人,然后你就把消息發給這里面的所有人了。
“mqtt協議有什么作用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。