WIFI實戰應用第五章 ESP32的WebSocket服務器

學習目的及目標

· 掌握Websocket原理和工作過程

· 掌握樂鑫ESP32的WebSocket的程序設計

WebSocket原理

WebSocket 是一種網絡通信協議,是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協議。

為什麼需要 WebSocket ?

瞭解計算機網絡協議的人,應該都知道:HTTP 協議是一種無狀態的、無連接的、單向的應用層協議。它採用了請求/響應模型。通信請求只能由客戶端發起,服務端對請求做出應答處理。

這種通信模型有一個弊端:HTTP 協議無法實現服務器主動向客戶端發起消息。

這種單向請求的特點,註定瞭如果服務器有連續的狀態變化,客戶端要獲知就非常麻煩。大多數 Web 應用程序將通過頻繁的異步JavaScript和XML(AJAX)請求實現長輪詢。輪詢的效率低,非常浪費資源(因為必須不停連接,或者 HTTP 連接始終打開)。

因此,工程師們一直在思考,有沒有更好的方法。WebSocket 就是這樣發明的。WebSocket 連接允許客戶端和服務器之間進行全雙工通信,以便任一方都可以通過建立的連接將數據推送到另一端。WebSocket 只需要建立一次連接,就可以一直保持連接狀態。這相比於輪詢方式的不停建立連接顯然效率要大大提高。

Websocket特點

· 建立在 TCP 協議之上,服務器端的實現比較容易。

· 與 HTTP 協議有著良好的兼容性。默認端口也是 80 和 443 ,並且握手階段採用 HTTP 協議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務器。

· 數據格式比較輕量,性能開銷小,通信高效。

· 可以發送文本,也可以發送二進制數據。

· 沒有同源限制,客戶端可以與任意服務器通信。

· 協議標識符是ws(如果加密,則為wss),服務器網址就是 URL,如下圖。

WIFI實戰應用第五章 ESP32的WebSocket服務器

請求握手包

接收請求包

注:WebSocket握手詳解

Websocket和HTTP連接過程

WIFI實戰應用第五章 ESP32的WebSocket服務器

Websocket工作過程

WIFI實戰應用第五章 ESP32的WebSocket服務器

軟件設計

ESP32的Websocket詳細過程

WIFI實戰應用第五章 ESP32的WebSocket服務器

ESP32的Websocket接口介紹

· 連接函數:netconn_new();

· 綁定函數:netconn_bind();

· 監聽函數:netconn_listen();

· 獲取連接函數:netconn_accept();

· 接收數據函數:netconn_recv();

· 發送數據函數:netconn_write();

· 關閉連接函數:netconn_close();

· 刪除連接函數:netconn_delete();

更多更詳細接口請參考官方指南。

Websocket新建任務編寫

Websocket連接過程代碼

Websocket發送代碼

代碼有全部中文註釋

測試流程和效果展示

測試流程

· 修改STA的賬號密碼

· 使用電腦助手工具進行WebSocket測試

效果展示

· 連接

WIFI實戰應用第五章 ESP32的WebSocket服務器

· 發送

WIFI實戰應用第五章 ESP32的WebSocket服務器

· 控燈

WIFI實戰應用第五章 ESP32的WebSocket服務器

· 斷開連接

WIFI實戰應用第五章 ESP32的WebSocket服務器

WebSocket總結

· 此源碼主要是學習WebSocket整個流程,實際中還有很多可以完善的地方,瞭解WebSocket後,就自己飛向天空吧。

· 源碼地址:https://github.com/xiaolongba/wireless-tech

開源地址:https://github.com/HX-IoT/


分享到:


相關文章: