使用swoole作为基于ESP6的脚本可编程控制器的云端物联网网关框架
脚本可编程控制器的本地功能已经基本完成,开始实现远程相关功能。
远程系统整体架构如下:
使用ESP8266的SDK实现tcp服务器和tcp客户端。
在tcp服务器的基础上编写http协议解析代码,设计简单的http服务器,处理与浏览器的数据交互,包括内置网页的下载,并使用ajax技术获取状态并保存数据。
使用html、js、css设计网页并下载存储到ESP8266模块的flash中,结合后端c语言的数据处理,实现基于网页的脚本编程、状态查看、参数设置等功能;
云服务器端,购买了一台linux云服务器主机,选择swoole作为TCP/IP通信网关;
Swoole 是一个适用于生产环境的 PHP 异步网络通信引擎,使 PHP 开发者能够编写高性能异步并发 TCP、UDP、Unix Socket、HTTP、WebSocket 服务。
在Swoole框架中实现tcp服务器和websocket服务器,其中tcp服务器用于连接控制器和云端,控制器的tcp客户端与云服务器的tcp服务器建立TCP长连接,以便从互联网获取数据可通过TCP连接远程发送给控制器,实现对控制器的远程控制;
远程网页使用websocket客户端与Swoole的websocket服务器建立长连接,实现云服务器与网页之间的远程穿透,从而可以将控制器的状态实时推送到网页显示时间;
websocket 服务器和 tcp 服务器之间的数据通过内存共享,PC 工具、网页和控制器都有唯一的编号,PC 主机、控制器和网页之间的数据消息以这个编号为来源和目的地址,tcp服务器和websocket服务器收到数据报文后根据目的地址进行转发,实现PC上的数据传输。 tcp服务器和websocket服务器收到数据报文后,根据目的地址进行转发,从而实现PC工具、网页和控制器之间的数据互联。
使用redis作为内存数据库,可以将控制器的状态数据临时存储在数据库中,实现电话异常报警等功能,而使用mysql作为永久数据库,存储一些配置数据。