穆红显 刘亮 赵汝峰
摘 要:针对嵌入式Web服务器对资源和数据处理能力有限的特点,为了解决在嵌入式Web中输出如折线图等具有交互能力的动态图形问题,首先分析了FLASH、VML、SVG以及Java Applet等技术的不足,提出一种基于HTML5 Canvas绘制动态图形的瘦服务器思想,通过CGI程序与SQLite数据库交互实现图形的动态输出,并给出实例验证,为基于嵌入式Web服务器的动态图形輸出提供一种解决思路。
关键词:嵌入式Web Canvas标签;SQLite数据库;动态图形;瘦服务器
中图分类号:TP311.1 文献标识码:A 文章编号:2096-4706(2020)16-0078-04
Dynamic Graphic Output Embedded Web Service Based on SQLite + HTML5 Canvas
MU Hongxian,LIU Liang,ZHAO Rufeng
(CETC Satellite Navigation Operation & Service Co.,Ltd.,Shijiazhuang 050200,China)
Abstract:In view of the limited resources and data processing capacity of embedded Web server,in order to solve the problem of interactive dynamic graphics such as line graph output in embedded Web,this paper first analyzes the shortcomings of FLASH,VML,SVG and Java Applet technologies,and proposes a thin server idea of drawing dynamic graphics based on HTML5 canvas. The dynamic output of graphics is realized through the interaction between CGI program and SQLite database. An example is given to verify the idea,which provides a solution for dynamic graphics output based on embedded Web server.
Keywords:embedded Web Canvas tag;SQLite database;dynamic graphics;thin server
0 引 言
基于笔者所在单位智慧农业领域相关项目需求,本文研究了温室大棚温湿度实时环境数据的采集与监测,温室大棚温湿度的实时环境数据和历史数据变化趋势对于农业生产具有重要意义。对于温室大棚等特定地点的温湿度的监测和数据传输通常由嵌入式设备完成,通过传感器进行数据采集,并通过无线通信技术进行数据传输。为了数据访问的便捷性,笔者所研究的温室大棚温湿度等环境数据的监测基于嵌入式Web服务实现,这需要嵌入式Web服务器与浏览器进行交互并具有提供动态数据访问的能力,而为了形象直观地描述数据的范围及变化趋势等信息,在该应用中需提供动态图形页面。笔者的研究重点在于动态图形绘制与输出技术的探索与实现。
嵌入式设备软硬件资源有限,作为Web服务器的载体,其数据处理能力远不如传统服务器[1],因此笔者没有采用在嵌入式服务器端计算、绘制图形并将其输出至浏览器端的传统方法,一方面这种方式会增加嵌入式服务器的资源消耗,另一方面,在服务器与浏览器之间传输温湿度数据变化趋势的图片将造成极大的带宽消耗。本文在详细分析、比较服务器端绘图及现有的VML、SVG、FLASH、JavaScript以及Java Applet等客户端图形绘制技术的基础上,指出传统技术的不足之处,并提出一种基于HTML5规范的将Canvas标签直接在浏览器端进行动态绘制的瘦服务器思想,将采集的实时温湿度数据存入SQLite数据库,通过CGI程序读取SQLite中的关键数据信息并完成浏览器和服务器端数据的交互后,最终由客户端浏览器的Canvas元素完成动态图形的绘制,这样一来减轻了嵌入式服务器的负载,提高了系统运行效率,能够满足项目需求和生产生活需要。
1 相关技术介绍
1.1 SQLite介绍
在本研究中,SQLite数据库用于存储温湿度等环境数据,它由D.Richard Hipp用C语言开发,它开源免费,是跨平台、轻量级关系型数据库,提供对多数SQL92标准的支持:多表、事务、索引、触发、视图以及一系列应用程序接口[2]。作为文件型数据库,其所有信息包含于一个文件内,方便转移,并且其核心引擎不依赖第三方软件,直接编译链接即可。该数据库由内核、后端、编译器及附件等构成,SQL语句被编译后生成能在虚拟机中运行的代码。
1.2 CGI程序
CGI(Common Gateway Interface)是Web服务器与外部扩展应用程序交互的一种标准接口,在本研究中用于前后端温湿度等环境数据的交互,作为嵌入式Web服务器的重要内容之一,其主要功能是通过标准输入输出完成客户端与服务器的动态交互,一方面它可以通过GET或POST方法将HTML页面中的内容传递到服务器并做出相应的处理;另一方面通过编写不同的CGI外部扩展程序,能够采集现场设备数据及访问外部数据库,并将数据以纯文本ASCⅡ码或HTML形式传递给服务器守护进程[3],守护进程将数据回送到客户端浏览器。
CGI是B/S架构下服务端编程的鼻祖,编程语言独立和平台无关,有较高的运行效率和良好的可移植性;绝大多数的Web服务器和浏览器都支持CGI[4],其具有一定的灵活性、兼容性和可扩展性。基于以上,CGI技术完全适用于嵌入式Web程序的开发。
1.3 HTML5 Canvas元素
Canvas元素是HTML5引入的新标签,为绘制客户端矢量图形而出现,目前支持二维绘图,是基于像素的即时模式图形系统。它没有自己的行为,但能把HTML5定义的绘图函数集Canvas API展现给客户端JavaScript,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法,并支持定义事件行为的标准事件属性,通过脚本能在画布上便捷、实时地绘制、渲染各种图形及动画效果或开发交互式游戏,无需第三方插件参与[5]。目前,Safari 1.3、Firefox 1.5、Opera 9、Chrome 2.0、IE 9及以上版本的浏览器均支持Canvas,IE 9以下的IE浏览器通过导入Google的开源JavaScript项目excanvas.js获得支持[6]。笔者采用HTML5的Canvas元素绘制浏览器端的温湿度历史数据变化趋势动态图形。
2 已有图形绘制技术分析与比较
目前在嵌入式系统中绘制动态图形的方法主要有以下几种:在嵌入式服务器端进行运算、绘制图形并将其输出至浏览器;通过VML或Flash技术绘制动态图形;通过SVG技术绘制动态图形;通过Java Applet技术绘制动态图形;利用JavaScript绘图。下面对以上技术进行分析比较。
2.1 服务器端图形绘制
利用GTK、SDL、OpenGL ES、MiniGUI或QT/E等图形库,通过在嵌入式服务器端将数据进行运算、绘制图形及转化为图像文件,并将图像文件传输到远程客户端的浏览器中显示。然而目前嵌入式设备软硬件资源有限且处理能力较差,如果客户端频繁并发地发送绘制请求,一方面增加服务器端的负载,导致服务器超负荷运转;另一方面图像在网络的传输消耗大量带宽,延长响应时间,影响客户端浏览速度。
2.2 利用VML或FLASH技术绘制图形
VML即矢量可标记语言,它通过XML文档来描述绘图,直接在浏览器端绘制输出图形,具有编写简单、兼容HTML文档等优点[7],但在绘制高精度矢量图形、动画或3D效果等深层应用时效率低下,作为微软的私有技术,它不被任何其他浏览器支持,在浏览器兼容方面存在问题。
Flash用于制作动画和图像,通过Action Script脚本在浏览器端实现功能,由Flash Player中的脚本虚拟机(AVM)执行,所以浏览器端需要依赖Flash Player。作为解释性语言,Flash执行效率低,应用于嵌入式系统时情况更为严重。作为私有技术,其尚未与开放标准兼容,虽然Flash技术暂时占据了大部分的矢量动画市场,但各主流浏览器对Flash的支持情况不容乐观,近年来其面临SVG、Canvas等技术的挑战,发展前景尚未十分明朗。
2.3 通过SVG技术绘制动态图形
SVG即可缩放矢量图形,使用XML来描述二维图形和绘图程序。如果把SVG嵌入HTML文档需要通过引用
2.4 基于Java Applet的图形绘制
柯宗武、陈年生等在“Java在基于Web的嵌入式系统中的应用”中指出通过Java Applet可以实现动态图形的绘制。用户访问嵌入Java Applet的网页时,代码会被下载至客户端运行,这样动态图形的绘制直接由客户端完成而无需增加嵌入式服务器的负载[9,10]。然而这种方法需要额外编写服务器端程序,将数据不断读出并传输至客户端;支持Java Applet运行还需要Java虚拟机,这就要求所有浏览器安装虚拟机,增加了系统的复杂性和操作的繁琐性。
2.5 JavaScript图形绘制
如果不引用Canvas,直接通过JavaScript与CGI交互完成动态图形绘制,则需要冗长繁杂的代码,容易出错且运行不够稳定。此外,虽然主流浏览器均支持JavaScript,但不同浏览器的支持程度和标准并不完全相同,在编写脚本时需根据客户端浏览器种类分别开发,增加了开发的难度。
3 基于Canvas的动态图形绘制
3.1 流程设计
在不需要与后台数据库进行数据交互时,利用Canvas绘制简单图形只需直接在HTML中添加该标签并编写相关JavaScript代码,然而在笔者监测的温湿度等环境数据变化趋势的实际绘制中,为了使趋势图更有意义,能直观形象地体现温湿度等指标数据的变化趋势和范围,往往需要提取关键历史数据点并将其体现于折线图等图形中,而历史数据存储于数据库中,这就需要利用CGI技术进行前后台温湿度数据的交互,将数据库中的数据提取并绘制在动态图形中,工作流程如图1所示。
温室大棚的管理人员在客户端浏览器首先登录嵌入式系统服务器,验证成功之后调用主CGI后臺程序。CGI程序一方面负责根据前台Form表单的传递值(由管理人员输入)读取SQLite数据库中的关键温湿度数据点信息,另一方面负责从文件系统中读取HTML文件,包含Canvas标签、特殊标记以及其他页面信息,然后对HTML文件进行解析,并在HTML文件的特殊标记处将读取到的数据库中的关键历史温湿度数据点一并嵌入整合,进行封装,以printf的方式返回给管理人员的客户端浏览器,最终在客户端进行趋势图等动态图形的绘制。
3.2 系统设计
为减少服务器与浏览器通讯数据量,减轻网络和服务器端负载,首先在HTML文件中嵌入Canvas标签,并将所要绘制图形的基本信息即不需要与数据库交互部分的信息尽可能地实现,而在需要显示后台数据库关键历史数据的地方嵌入特殊标记。注意该HTML文件位于嵌入式服务器端的文件系统中,CGI程序对其读取时需采用相对路径的方式。这里之所以采用特殊标记即自定义数据点的方式来实现数据交互,而没有利用异步刷新AJAX技术,是因为动态图形的生成只需根据前端管理人员的选择,无需实时刷新。
CGI程序主要实现对数据库的读取以及对动态图形中交互部分的绘制,根据前台内嵌表单传递值检索数据库,该值最好为数据库的主键,读取关键数据点,将该值经过处理后整合入特殊标记处,输出解析完毕的HTML文件至客户端浏览器,对关键数据点的处理需要一定技巧,需根据所选坐标系的大小按照相应的比例关系将数据库的实际值转换为精确的像素点或坐标值,以完成折线图、柱状图等历史温湿度数据动态图形的准确绘制。
4 动态图形输出实例
4.1 系统搭建
为验证以上方案的可行性,在实际应用中笔者以温度数据为例,实时采集并动态绘制任意连续七天的日平均温度折线图。选择TE2440-Ⅱ为硬件开发平台,该平台以S3C2440为微处理器,内设网络接口,然后移植裁剪后的嵌入式Linux 2.6.33为操作系统,以Boa为Web服务器,SQLite为后台数据库,利用开发板集成的温度传感器DS18B20为数据采集设备,通过编写CGI程序调用设备驱动文件采集实时温度数据并存入温度表,在数据库端插入触发器,计算每天的平均温度值并存入平均温度表,作为动态温度折线图的数据源。
4.2 系统实现
在HTML文件中嵌入Canvas标签,在JavaScript中实现温度、时间坐标系、温度数据网格等无需与数据库交互部分的图形绘制,在需要读取数据库关键温度点处嵌入特殊标记。
选择标准C语言为后台CGI程序开发语言,借助CGIC库在CGI文件中首先读取管理人员在Form表单输入的日期值,据此用SQL语句检索SQLite数据库的平均温度表,判断该日期及折线图所需要的温度数据点是否存在,若存在则读取这七个温度值作为折线图的关键温度点,否则提示数据库中无此温度。输出实现的HTML文件,当检测到特殊标记FLAG时,根据从平均温度表中读取到的温度值及对应的比例关系绘制关键点及连接线,进而绘制出整条折线图;当检测到date0标记时,在坐标系的X轴对应部分输出日期值。
4.3 系统运行
利用交叉编译工具对CGI源程序进行编译,生成能在嵌入式Linux下运行的可执行文件,并将HTML文件及生成的CGI文件分别部署于Boa服务器的相应路径下,然后设置客户端及嵌入式服务器端的IP地址。在客户端浏览器进行访问,输出的日平均温度折线图如图2所示。
经测试,系统运行稳定,服务器端占用资源较小,客户端访问速度快,完全能够满足实际生产生活中监测温湿度等环境数据动态变化趋势的需要。
4.4 分析与讨论
在单位主推的智慧农业相关领域内温室大棚温湿度环境数据监测的实际项目应用中,笔者采用HTML5 Canvas与CGI技术相结合的方式,借助SQLite数据库为数据源在嵌入式Web体系中绘制动态图形,该方法具有众多优势。
首先它采用JavaScript技术并利用绘图函数集Canvas API完全在客户端进行绘制、渲染,摒弃了以往通过GTK、QT/E等图形库在服务器端直接进行绘图的方式,极大地减少了服务端的负载,为当前软硬件资源有限的嵌入式系统服务器节省了宝贵的资源,真正实现了瘦服务器的思想,适用于嵌入式系统开发;其次,由于是在浏览器端绘图,只需在服务器端和客户端之间传输关键数据等文本信息,无需直接传递庞大的图像文件,这样一来既降低了带宽消耗,节约了成本,又提高了客户端的浏览速度,提升了整个系统的性能;第三,该绘制方式灵活多样,支持标准事件属性,能便捷、实时地绘制、渲染各种图形及动画效果甚至开发交互式游戏,无需借助如FlashPlayer或JVM等第三方插件,易于开发;最后,该方法高效稳定,通用性强,兼容性好,作为HTML5标准,Canvas标签几乎被所有的主流浏览器支持,而CGI技术具有编程语言独立和平台无关的特性,具有较高的运行效率和良好的可移植性,这些无疑都极大增强了程序的运行效率和扩展性,对基于嵌入式系统的动态图形绘制具有应用价值,能够高效便捷地满足实际生产生活的需要。
5 结 论
本文结合在实际生产生活中监测温室大棚温湿度等环境数据及历史数据变化趋势的需要,在分析目前嵌入式系统B/S模式下绘制动态图形的主流方法的基础上,提出一种基于HTML5 Canvas和CGI技术,以SQLite数据库为数据源,在嵌入式Web体系中绘制动态图形的瘦服务器思想,并阐述了该思想的实现思路,然后基于HTML5 Canvas、CGI交互和SQLite数据库技术开发搭建嵌入式Web系统,以折线图实例的方式详细介绍了该方法的实现过程,验证了该方法的可行性。笔者提出的基于嵌入式系统B/S架构动态图形绘制的瘦服务器思想实现了在浏览器端绘制图形的目的,降低了服务器端的资源消耗和带宽消耗,适合嵌入式系统软硬件资源有限的特点,又具有良好的运行效率、稳定性和通用性,对于在嵌入式Web中绘制动态图形有较高的实用价值。
参考文献:
[1] 刘翔,童薇,刘景宁,等.动态内存分配器研究综述 [J].计算机学报,2018,41(10):2359-2378.
[2] 杨智程.基于云化的订单中心管理系统的设计与实现 [D].成都:电子科技大学,2017.
[3] 黄良超.基于web的微生物群落多样性分析及可视化的研究与实现 [D].沈阳:辽宁大学,2018.
[4] 田晨林,陈正宇.嵌入式系统Web服务器的移植与CGI的应用 [J].金陵科技学院学报,2019,35(2):40-43.
[5] LUBBERS P,ALBERS B,SALIM F.HTML5高级程序设计 [M].李杰,柳靖,刘淼,译.北京:人民邮电出版社,2011:78-102.
[6] 陈哲,黄巍,陈昭.基于Web应用的医学图像半自动标注系统 [J].计算机应用与软件,2019,36(10):1-5.
[7] 郑智江,王杰民.基于VML的简单WebGIS实现 [J].软件工程,2016,19(5):1-3.
[8] W3school.HTML页面中的SVG [EB/OL].[2020-07-15].http://www.w3school.com.cn/svg/svg_inhtml.asp.
[9] 柯宗武,陈年生,汪自云.Java在基于Web的嵌入式系统中的应用 [J].微计算機信息,2005(13):19-20+23.
[10] 潘琢金,王秋实.基于AJAX与CGI的嵌入式瘦Web服务器研究 [J].计算机工程与设计,2010,31(20):4372-4374+ 4437.
作者简介:穆红显(1986.09—),男,汉族,河北石家庄人,工程师,硕士研究生,研究方向:嵌入式系统、软件开发;刘亮(1983.08—),男,汉族,河北石家庄人,工程师,硕士研究生,研究方向:嵌入式软件设计、嵌入式数据库技术;赵汝峰(1990.09—),男,汉族,河北元氏人,助理工程师,本科,研究方向:嵌入式软件开发、Web设计。