穆紅顯 劉亮 趙汝峰
摘? 要:針對嵌入式Web服務(wù)器對資源和數(shù)據(jù)處理能力有限的特點,為了解決在嵌入式Web中輸出如折線圖等具有交互能力的動態(tài)圖形問題,首先分析了FLASH、VML、SVG以及Java Applet等技術(shù)的不足,提出一種基于HTML5 Canvas繪制動態(tài)圖形的瘦服務(wù)器思想,通過CGI程序與SQLite數(shù)據(jù)庫交互實現(xiàn)圖形的動態(tài)輸出,并給出實例驗證,為基于嵌入式Web服務(wù)器的動態(tài)圖形輸出提供一種解決思路。
關(guān)鍵詞:嵌入式Web Canvas標(biāo)簽;SQLite數(shù)據(jù)庫;動態(tài)圖形;瘦服務(wù)器
中圖分類號:TP311.1? ? ? 文獻標(biāo)識碼: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? 引? 言
基于筆者所在單位智慧農(nóng)業(yè)領(lǐng)域相關(guān)項目需求,本文研究了溫室大棚溫濕度實時環(huán)境數(shù)據(jù)的采集與監(jiān)測,溫室大棚溫濕度的實時環(huán)境數(shù)據(jù)和歷史數(shù)據(jù)變化趨勢對于農(nóng)業(yè)生產(chǎn)具有重要意義。對于溫室大棚等特定地點的溫濕度的監(jiān)測和數(shù)據(jù)傳輸通常由嵌入式設(shè)備完成,通過傳感器進行數(shù)據(jù)采集,并通過無線通信技術(shù)進行數(shù)據(jù)傳輸。為了數(shù)據(jù)訪問的便捷性,筆者所研究的溫室大棚溫濕度等環(huán)境數(shù)據(jù)的監(jiān)測基于嵌入式Web服務(wù)實現(xiàn),這需要嵌入式Web服務(wù)器與瀏覽器進行交互并具有提供動態(tài)數(shù)據(jù)訪問的能力,而為了形象直觀地描述數(shù)據(jù)的范圍及變化趨勢等信息,在該應(yīng)用中需提供動態(tài)圖形頁面。筆者的研究重點在于動態(tài)圖形繪制與輸出技術(shù)的探索與實現(xiàn)。
嵌入式設(shè)備軟硬件資源有限,作為Web服務(wù)器的載體,其數(shù)據(jù)處理能力遠(yuǎn)不如傳統(tǒng)服務(wù)器[1],因此筆者沒有采用在嵌入式服務(wù)器端計算、繪制圖形并將其輸出至瀏覽器端的傳統(tǒng)方法,一方面這種方式會增加嵌入式服務(wù)器的資源消耗,另一方面,在服務(wù)器與瀏覽器之間傳輸溫濕度數(shù)據(jù)變化趨勢的圖片將造成極大的帶寬消耗。本文在詳細(xì)分析、比較服務(wù)器端繪圖及現(xiàn)有的VML、SVG、FLASH、JavaScript以及Java Applet等客戶端圖形繪制技術(shù)的基礎(chǔ)上,指出傳統(tǒng)技術(shù)的不足之處,并提出一種基于HTML5規(guī)范的將Canvas標(biāo)簽直接在瀏覽器端進行動態(tài)繪制的瘦服務(wù)器思想,將采集的實時溫濕度數(shù)據(jù)存入SQLite數(shù)據(jù)庫,通過CGI程序讀取SQLite中的關(guān)鍵數(shù)據(jù)信息并完成瀏覽器和服務(wù)器端數(shù)據(jù)的交互后,最終由客戶端瀏覽器的Canvas元素完成動態(tài)圖形的繪制,這樣一來減輕了嵌入式服務(wù)器的負(fù)載,提高了系統(tǒng)運行效率,能夠滿足項目需求和生產(chǎn)生活需要。
1? 相關(guān)技術(shù)介紹
1.1? SQLite介紹
在本研究中,SQLite數(shù)據(jù)庫用于存儲溫濕度等環(huán)境數(shù)據(jù),它由D.Richard Hipp用C語言開發(fā),它開源免費,是跨平臺、輕量級關(guān)系型數(shù)據(jù)庫,提供對多數(shù)SQL92標(biāo)準(zhǔn)的支持:多表、事務(wù)、索引、觸發(fā)、視圖以及一系列應(yīng)用程序接口[2]。作為文件型數(shù)據(jù)庫,其所有信息包含于一個文件內(nèi),方便轉(zhuǎn)移,并且其核心引擎不依賴第三方軟件,直接編譯鏈接即可。該數(shù)據(jù)庫由內(nèi)核、后端、編譯器及附件等構(gòu)成,SQL語句被編譯后生成能在虛擬機中運行的代碼。
1.2? CGI程序
CGI(Common Gateway Interface)是Web服務(wù)器與外部擴展應(yīng)用程序交互的一種標(biāo)準(zhǔn)接口,在本研究中用于前后端溫濕度等環(huán)境數(shù)據(jù)的交互,作為嵌入式Web服務(wù)器的重要內(nèi)容之一,其主要功能是通過標(biāo)準(zhǔn)輸入輸出完成客戶端與服務(wù)器的動態(tài)交互,一方面它可以通過GET或POST方法將HTML頁面中的內(nèi)容傳遞到服務(wù)器并做出相應(yīng)的處理;另一方面通過編寫不同的CGI外部擴展程序,能夠采集現(xiàn)場設(shè)備數(shù)據(jù)及訪問外部數(shù)據(jù)庫,并將數(shù)據(jù)以純文本ASCⅡ碼或HTML形式傳遞給服務(wù)器守護進程[3],守護進程將數(shù)據(jù)回送到客戶端瀏覽器。
CGI是B/S架構(gòu)下服務(wù)端編程的鼻祖,編程語言獨立和平臺無關(guān),有較高的運行效率和良好的可移植性;絕大多數(shù)的Web服務(wù)器和瀏覽器都支持CGI[4],其具有一定的靈活性、兼容性和可擴展性?;谝陨希珻GI技術(shù)完全適用于嵌入式Web程序的開發(fā)。
1.3? HTML5 Canvas元素
Canvas元素是HTML5引入的新標(biāo)簽,為繪制客戶端矢量圖形而出現(xiàn),目前支持二維繪圖,是基于像素的即時模式圖形系統(tǒng)。它沒有自己的行為,但能把HTML5定義的繪圖函數(shù)集Canvas API展現(xiàn)給客戶端JavaScript,擁有多種繪制路徑、矩形、圓形、字符以及添加圖像的方法,并支持定義事件行為的標(biāo)準(zhǔn)事件屬性,通過腳本能在畫布上便捷、實時地繪制、渲染各種圖形及動畫效果或開發(fā)交互式游戲,無需第三方插件參與[5]。目前,Safari 1.3、Firefox 1.5、Opera 9、Chrome 2.0、IE 9及以上版本的瀏覽器均支持Canvas,IE 9以下的IE瀏覽器通過導(dǎo)入Google的開源JavaScript項目excanvas.js獲得支持[6]。筆者采用HTML5的Canvas元素繪制瀏覽器端的溫濕度歷史數(shù)據(jù)變化趨勢動態(tài)圖形。
2? 已有圖形繪制技術(shù)分析與比較
目前在嵌入式系統(tǒng)中繪制動態(tài)圖形的方法主要有以下幾種:在嵌入式服務(wù)器端進行運算、繪制圖形并將其輸出至瀏覽器;通過VML或Flash技術(shù)繪制動態(tài)圖形;通過SVG技術(shù)繪制動態(tài)圖形;通過Java Applet技術(shù)繪制動態(tài)圖形;利用JavaScript繪圖。下面對以上技術(shù)進行分析比較。
2.1? 服務(wù)器端圖形繪制
利用GTK、SDL、OpenGL ES、MiniGUI或QT/E等圖形庫,通過在嵌入式服務(wù)器端將數(shù)據(jù)進行運算、繪制圖形及轉(zhuǎn)化為圖像文件,并將圖像文件傳輸?shù)竭h(yuǎn)程客戶端的瀏覽器中顯示。然而目前嵌入式設(shè)備軟硬件資源有限且處理能力較差,如果客戶端頻繁并發(fā)地發(fā)送繪制請求,一方面增加服務(wù)器端的負(fù)載,導(dǎo)致服務(wù)器超負(fù)荷運轉(zhuǎn);另一方面圖像在網(wǎng)絡(luò)的傳輸消耗大量帶寬,延長響應(yīng)時間,影響客戶端瀏覽速度。
2.2? 利用VML或FLASH技術(shù)繪制圖形
VML即矢量可標(biāo)記語言,它通過XML文檔來描述繪圖,直接在瀏覽器端繪制輸出圖形,具有編寫簡單、兼容HTML文檔等優(yōu)點[7],但在繪制高精度矢量圖形、動畫或3D效果等深層應(yīng)用時效率低下,作為微軟的私有技術(shù),它不被任何其他瀏覽器支持,在瀏覽器兼容方面存在問題。
Flash用于制作動畫和圖像,通過Action Script腳本在瀏覽器端實現(xiàn)功能,由Flash Player中的腳本虛擬機(AVM)執(zhí)行,所以瀏覽器端需要依賴Flash Player。作為解釋性語言,F(xiàn)lash執(zhí)行效率低,應(yīng)用于嵌入式系統(tǒng)時情況更為嚴(yán)重。作為私有技術(shù),其尚未與開放標(biāo)準(zhǔn)兼容,雖然Flash技術(shù)暫時占據(jù)了大部分的矢量動畫市場,但各主流瀏覽器對Flash的支持情況不容樂觀,近年來其面臨SVG、Canvas等技術(shù)的挑戰(zhàn),發(fā)展前景尚未十分明朗。
2.3? 通過SVG技術(shù)繪制動態(tài)圖形
SVG即可縮放矢量圖形,使用XML來描述二維圖形和繪圖程序。如果把SVG嵌入HTML文檔需要通過引用
2.4? 基于Java Applet的圖形繪制
柯宗武、陳年生等在“Java在基于Web的嵌入式系統(tǒng)中的應(yīng)用”中指出通過Java Applet可以實現(xiàn)動態(tài)圖形的繪制。用戶訪問嵌入Java Applet的網(wǎng)頁時,代碼會被下載至客戶端運行,這樣動態(tài)圖形的繪制直接由客戶端完成而無需增加嵌入式服務(wù)器的負(fù)載[9,10]。然而這種方法需要額外編寫服務(wù)器端程序,將數(shù)據(jù)不斷讀出并傳輸至客戶端;支持Java Applet運行還需要Java虛擬機,這就要求所有瀏覽器安裝虛擬機,增加了系統(tǒng)的復(fù)雜性和操作的繁瑣性。
2.5? JavaScript圖形繪制
如果不引用Canvas,直接通過JavaScript與CGI交互完成動態(tài)圖形繪制,則需要冗長繁雜的代碼,容易出錯且運行不夠穩(wěn)定。此外,雖然主流瀏覽器均支持JavaScript,但不同瀏覽器的支持程度和標(biāo)準(zhǔn)并不完全相同,在編寫腳本時需根據(jù)客戶端瀏覽器種類分別開發(fā),增加了開發(fā)的難度。
3? 基于Canvas的動態(tài)圖形繪制
3.1? 流程設(shè)計
在不需要與后臺數(shù)據(jù)庫進行數(shù)據(jù)交互時,利用Canvas繪制簡單圖形只需直接在HTML中添加該標(biāo)簽并編寫相關(guān)JavaScript代碼,然而在筆者監(jiān)測的溫濕度等環(huán)境數(shù)據(jù)變化趨勢的實際繪制中,為了使趨勢圖更有意義,能直觀形象地體現(xiàn)溫濕度等指標(biāo)數(shù)據(jù)的變化趨勢和范圍,往往需要提取關(guān)鍵歷史數(shù)據(jù)點并將其體現(xiàn)于折線圖等圖形中,而歷史數(shù)據(jù)存儲于數(shù)據(jù)庫中,這就需要利用CGI技術(shù)進行前后臺溫濕度數(shù)據(jù)的交互,將數(shù)據(jù)庫中的數(shù)據(jù)提取并繪制在動態(tài)圖形中,工作流程如圖1所示。
溫室大棚的管理人員在客戶端瀏覽器首先登錄嵌入式系統(tǒng)服務(wù)器,驗證成功之后調(diào)用主CGI后臺程序。CGI程序一方面負(fù)責(zé)根據(jù)前臺Form表單的傳遞值(由管理人員輸入)讀取SQLite數(shù)據(jù)庫中的關(guān)鍵溫濕度數(shù)據(jù)點信息,另一方面負(fù)責(zé)從文件系統(tǒng)中讀取HTML文件,包含Canvas標(biāo)簽、特殊標(biāo)記以及其他頁面信息,然后對HTML文件進行解析,并在HTML文件的特殊標(biāo)記處將讀取到的數(shù)據(jù)庫中的關(guān)鍵歷史溫濕度數(shù)據(jù)點一并嵌入整合,進行封裝,以printf的方式返回給管理人員的客戶端瀏覽器,最終在客戶端進行趨勢圖等動態(tài)圖形的繪制。
3.2? 系統(tǒng)設(shè)計
為減少服務(wù)器與瀏覽器通訊數(shù)據(jù)量,減輕網(wǎng)絡(luò)和服務(wù)器端負(fù)載,首先在HTML文件中嵌入Canvas標(biāo)簽,并將所要繪制圖形的基本信息即不需要與數(shù)據(jù)庫交互部分的信息盡可能地實現(xiàn),而在需要顯示后臺數(shù)據(jù)庫關(guān)鍵歷史數(shù)據(jù)的地方嵌入特殊標(biāo)記。注意該HTML文件位于嵌入式服務(wù)器端的文件系統(tǒng)中,CGI程序?qū)ζ渥x取時需采用相對路徑的方式。這里之所以采用特殊標(biāo)記即自定義數(shù)據(jù)點的方式來實現(xiàn)數(shù)據(jù)交互,而沒有利用異步刷新AJAX技術(shù),是因為動態(tài)圖形的生成只需根據(jù)前端管理人員的選擇,無需實時刷新。
CGI程序主要實現(xiàn)對數(shù)據(jù)庫的讀取以及對動態(tài)圖形中交互部分的繪制,根據(jù)前臺內(nèi)嵌表單傳遞值檢索數(shù)據(jù)庫,該值最好為數(shù)據(jù)庫的主鍵,讀取關(guān)鍵數(shù)據(jù)點,將該值經(jīng)過處理后整合入特殊標(biāo)記處,輸出解析完畢的HTML文件至客戶端瀏覽器,對關(guān)鍵數(shù)據(jù)點的處理需要一定技巧,需根據(jù)所選坐標(biāo)系的大小按照相應(yīng)的比例關(guān)系將數(shù)據(jù)庫的實際值轉(zhuǎn)換為精確的像素點或坐標(biāo)值,以完成折線圖、柱狀圖等歷史溫濕度數(shù)據(jù)動態(tài)圖形的準(zhǔn)確繪制。
4? 動態(tài)圖形輸出實例
4.1? 系統(tǒng)搭建
為驗證以上方案的可行性,在實際應(yīng)用中筆者以溫度數(shù)據(jù)為例,實時采集并動態(tài)繪制任意連續(xù)七天的日平均溫度折線圖。選擇TE2440-Ⅱ為硬件開發(fā)平臺,該平臺以S3C2440為微處理器,內(nèi)設(shè)網(wǎng)絡(luò)接口,然后移植裁剪后的嵌入式Linux 2.6.33為操作系統(tǒng),以Boa為Web服務(wù)器,SQLite為后臺數(shù)據(jù)庫,利用開發(fā)板集成的溫度傳感器DS18B20為數(shù)據(jù)采集設(shè)備,通過編寫CGI程序調(diào)用設(shè)備驅(qū)動文件采集實時溫度數(shù)據(jù)并存入溫度表,在數(shù)據(jù)庫端插入觸發(fā)器,計算每天的平均溫度值并存入平均溫度表,作為動態(tài)溫度折線圖的數(shù)據(jù)源。
4.2? 系統(tǒng)實現(xiàn)
在HTML文件中嵌入Canvas標(biāo)簽,在JavaScript中實現(xiàn)溫度、時間坐標(biāo)系、溫度數(shù)據(jù)網(wǎng)格等無需與數(shù)據(jù)庫交互部分的圖形繪制,在需要讀取數(shù)據(jù)庫關(guān)鍵溫度點處嵌入特殊標(biāo)記。
選擇標(biāo)準(zhǔn)C語言為后臺CGI程序開發(fā)語言,借助CGIC庫在CGI文件中首先讀取管理人員在Form表單輸入的日期值,據(jù)此用SQL語句檢索SQLite數(shù)據(jù)庫的平均溫度表,判斷該日期及折線圖所需要的溫度數(shù)據(jù)點是否存在,若存在則讀取這七個溫度值作為折線圖的關(guān)鍵溫度點,否則提示數(shù)據(jù)庫中無此溫度。輸出實現(xiàn)的HTML文件,當(dāng)檢測到特殊標(biāo)記FLAG時,根據(jù)從平均溫度表中讀取到的溫度值及對應(yīng)的比例關(guān)系繪制關(guān)鍵點及連接線,進而繪制出整條折線圖;當(dāng)檢測到date0標(biāo)記時,在坐標(biāo)系的X軸對應(yīng)部分輸出日期值。
4.3? 系統(tǒng)運行
利用交叉編譯工具對CGI源程序進行編譯,生成能在嵌入式Linux下運行的可執(zhí)行文件,并將HTML文件及生成的CGI文件分別部署于Boa服務(wù)器的相應(yīng)路徑下,然后設(shè)置客戶端及嵌入式服務(wù)器端的IP地址。在客戶端瀏覽器進行訪問,輸出的日平均溫度折線圖如圖2所示。
經(jīng)測試,系統(tǒng)運行穩(wěn)定,服務(wù)器端占用資源較小,客戶端訪問速度快,完全能夠滿足實際生產(chǎn)生活中監(jiān)測溫濕度等環(huán)境數(shù)據(jù)動態(tài)變化趨勢的需要。
4.4? 分析與討論
在單位主推的智慧農(nóng)業(yè)相關(guān)領(lǐng)域內(nèi)溫室大棚溫濕度環(huán)境數(shù)據(jù)監(jiān)測的實際項目應(yīng)用中,筆者采用HTML5 Canvas與CGI技術(shù)相結(jié)合的方式,借助SQLite數(shù)據(jù)庫為數(shù)據(jù)源在嵌入式Web體系中繪制動態(tài)圖形,該方法具有眾多優(yōu)勢。
首先它采用JavaScript技術(shù)并利用繪圖函數(shù)集Canvas API完全在客戶端進行繪制、渲染,摒棄了以往通過GTK、QT/E等圖形庫在服務(wù)器端直接進行繪圖的方式,極大地減少了服務(wù)端的負(fù)載,為當(dāng)前軟硬件資源有限的嵌入式系統(tǒng)服務(wù)器節(jié)省了寶貴的資源,真正實現(xiàn)了瘦服務(wù)器的思想,適用于嵌入式系統(tǒng)開發(fā);其次,由于是在瀏覽器端繪圖,只需在服務(wù)器端和客戶端之間傳輸關(guān)鍵數(shù)據(jù)等文本信息,無需直接傳遞龐大的圖像文件,這樣一來既降低了帶寬消耗,節(jié)約了成本,又提高了客戶端的瀏覽速度,提升了整個系統(tǒng)的性能;第三,該繪制方式靈活多樣,支持標(biāo)準(zhǔn)事件屬性,能便捷、實時地繪制、渲染各種圖形及動畫效果甚至開發(fā)交互式游戲,無需借助如FlashPlayer或JVM等第三方插件,易于開發(fā);最后,該方法高效穩(wěn)定,通用性強,兼容性好,作為HTML5標(biāo)準(zhǔn),Canvas標(biāo)簽幾乎被所有的主流瀏覽器支持,而CGI技術(shù)具有編程語言獨立和平臺無關(guān)的特性,具有較高的運行效率和良好的可移植性,這些無疑都極大增強了程序的運行效率和擴展性,對基于嵌入式系統(tǒng)的動態(tài)圖形繪制具有應(yīng)用價值,能夠高效便捷地滿足實際生產(chǎn)生活的需要。
5? 結(jié)? 論
本文結(jié)合在實際生產(chǎn)生活中監(jiān)測溫室大棚溫濕度等環(huán)境數(shù)據(jù)及歷史數(shù)據(jù)變化趨勢的需要,在分析目前嵌入式系統(tǒng)B/S模式下繪制動態(tài)圖形的主流方法的基礎(chǔ)上,提出一種基于HTML5 Canvas和CGI技術(shù),以SQLite數(shù)據(jù)庫為數(shù)據(jù)源,在嵌入式Web體系中繪制動態(tài)圖形的瘦服務(wù)器思想,并闡述了該思想的實現(xiàn)思路,然后基于HTML5 Canvas、CGI交互和SQLite數(shù)據(jù)庫技術(shù)開發(fā)搭建嵌入式Web系統(tǒng),以折線圖實例的方式詳細(xì)介紹了該方法的實現(xiàn)過程,驗證了該方法的可行性。筆者提出的基于嵌入式系統(tǒng)B/S架構(gòu)動態(tài)圖形繪制的瘦服務(wù)器思想實現(xiàn)了在瀏覽器端繪制圖形的目的,降低了服務(wù)器端的資源消耗和帶寬消耗,適合嵌入式系統(tǒng)軟硬件資源有限的特點,又具有良好的運行效率、穩(wěn)定性和通用性,對于在嵌入式Web中繪制動態(tài)圖形有較高的實用價值。
參考文獻:
[1] 劉翔,童薇,劉景寧,等.動態(tài)內(nèi)存分配器研究綜述 [J].計算機學(xué)報,2018,41(10):2359-2378.
[2] 楊智程.基于云化的訂單中心管理系統(tǒng)的設(shè)計與實現(xiàn) [D].成都:電子科技大學(xué),2017.
[3] 黃良超.基于web的微生物群落多樣性分析及可視化的研究與實現(xiàn) [D].沈陽:遼寧大學(xué),2018.
[4] 田晨林,陳正宇.嵌入式系統(tǒng)Web服務(wù)器的移植與CGI的應(yīng)用 [J].金陵科技學(xué)院學(xué)報,2019,35(2):40-43.
[5] LUBBERS P,ALBERS B,SALIM F.HTML5高級程序設(shè)計 [M].李杰,柳靖,劉淼,譯.北京:人民郵電出版社,2011:78-102.
[6] 陳哲,黃巍,陳昭.基于Web應(yīng)用的醫(yī)學(xué)圖像半自動標(biāo)注系統(tǒng) [J].計算機應(yīng)用與軟件,2019,36(10):1-5.
[7] 鄭智江,王杰民.基于VML的簡單WebGIS實現(xiàn) [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的嵌入式系統(tǒng)中的應(yīng)用 [J].微計算機信息,2005(13):19-20+23.
[10] 潘琢金,王秋實.基于AJAX與CGI的嵌入式瘦Web服務(wù)器研究 [J].計算機工程與設(shè)計,2010,31(20):4372-4374+ 4437.
作者簡介:穆紅顯(1986.09—),男,漢族,河北石家莊人,工程師,碩士研究生,研究方向:嵌入式系統(tǒng)、軟件開發(fā);劉亮(1983.08—),男,漢族,河北石家莊人,工程師,碩士研究生,研究方向:嵌入式軟件設(shè)計、嵌入式數(shù)據(jù)庫技術(shù);趙汝峰(1990.09—),男,漢族,河北元氏人,助理工程師,本科,研究方向:嵌入式軟件開發(fā)、Web設(shè)計。