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/


分享到:


相關文章: