内容提要
使用ESP8266搭建WebSocket服务器需ArduinoWebSockets库:创建81端口服务器,注册事件回调处理文本消息、连接和断开事件;收到文本时回发消息,连接时发送“hello”;setup中调用begin和onEvent,loop中调用loop维持运行。
延伸解读
事件回调是核心机制
示例中所有WebSocket交互都集中在event回调函数里处理。回调参数num标识客户端编号,可用于区分消息来源;type表示事件类型,payload和length携带数据。代码只对WStype_TEXT、WStype_CONNECTED和WStype_DISCONNECTED/WStype_ERROR做了分支,其中文本消息被原样回发,连接时发送“hello”。这种结构意味着扩展功能时,主要是在回调内按事件类型增加处理逻辑。
服务器端口与生命周期
WebSocketsServer对象在构造时指定端口81,因此服务器监听该端口。setup中调用begin()启动服务并注册onEvent回调,loop中持续调用loop()维持运行。示例还注释了disconnect()和close(),说明库提供了断开连接和关闭WebSocket的接口,但示例本身并未启用它们。读者需注意,若省略loop()中的调用,服务器将无法正常处理事件。
示例的边界与可扩展点
该示例仅演示了文本消息的回显和连接时的固定问候,未涉及二进制消息、多客户端管理、错误处理细节或WiFi连接配置。回调中WStype_DISCONNECTED和WStype_ERROR分支为空,说明断开与错误事件目前没有实际处理。若用于实际项目,需要在此基础上补充网络连接、客户端状态跟踪和更完整的事件响应逻辑。
Q&A
ESP8266 用 Arduino 做 WebSocket 服务器需要哪个库?
需要使用 arduinoWebSockets 库,项目地址是 https://github.com/Links2004/arduinoWebSockets。
ESP8266 WebSocket 服务器默认监听哪个端口?
示例中创建 WebSocketsServer 对象时指定端口为 81,即 webSocket = WebSocketsServer(81)。
WebSocket 事件回调函数的参数分别代表什么?
回调函数 event 的参数:num 是客户端编号,用于区分消息来自哪个客户端;type 是事件类型;payload 是事件携带的数据;length 是数据长度。
ESP8266 WebSocket 服务器收到文本消息后如何回发?
在事件回调中判断 type 为 WStype_TEXT 时,调用 webSocket.sendTXT(num, payload) 将收到的消息原样发回给对应客户端。
客户端连接和断开时 WebSocket 服务器分别做什么处理?
客户端连接时(WStype_CONNECTED),服务器发送 "hello" 消息;客户端断开或出错时(WStype_DISCONNECTED 或 WStype_ERROR),示例中未做处理。
ESP8266 WebSocket 服务器在 setup 和 loop 中需要调用哪些函数?
在 setup 中调用 webSocket.begin() 初始化 WebSocket,并调用 webSocket.onEvent(event) 设置事件回调;在 loop 中调用 webSocket.loop() 维持运行。