同一ESP32上如何同时运行ESPAsyncWebServer与ESP32WebServer两个服务
问题解决方案
核心问题根源是同一个网络端口同一时间只能被一个服务监听占用,你两个Web服务都绑定80端口,天然就会出现互斥,只有先启动的能抢到端口使用权。
以下是两种可落地的解决方式:
方案1:修改其中一个服务的监听端口(改动最小,可同时运行两个服务)
- 把两个服务的端口改成不同值即可,比如原有AsyncWebServer继续用80端口,摄像头用的ESP32WebServer改成81端口,初始化代码修改为:
ESP32WebServer server2(81); - 访问时加端口区分即可:传感器页面访问地址是
http://<ESP32的IP地址>,摄像头页面访问地址是http://<ESP32的IP地址>:81 - 该方案不需要修改原有业务逻辑,两个服务可以同时正常运行,不需要做启停切换。
方案2:统一使用AsyncWebServer实现所有功能(性能更优,无服务冲突)
你完全不需要同时引入两个WebServer库,AsyncWebServer本身就支持摄像头数据流输出,完全可以替代ESP32WebServer实现摄像头功能:
- 不需要再初始化第二个server,所有请求路由都在原有
AsyncWebServer server(80)实例上配置即可 - 异步架构的AsyncWebServer处理摄像头JPEG流/视频流的性能比同步的ESP32WebServer更好,不会阻塞传感器数据的请求响应,稳定性更高。
关于启停服务失败的说明
ESP32WebServer库本身确实没有实现end()方法,所以你无法通过先关闭原有服务再启动新服务的方式实现功能切换,就算对应库支持该操作,切换逻辑也会导致两个功能无法同时使用,用户访问需要等待服务切换,使用体验很差,不推荐走这个方向。
内容的提问来源于stack exchange,提问作者ebm9991
相关产品推荐
相关产品推荐

