當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于XML的移動(dòng)終端網(wǎng)絡(luò)瀏覽方案

摘要:基于XML的移動(dòng)終端網(wǎng)絡(luò)瀏覽方案是在傳統(tǒng)客戶(hù)/ 服務(wù)器瀏覽模式中插入中間層,中間層在后臺(tái)服務(wù)器上運(yùn)行,接收客戶(hù)端服務(wù)請(qǐng)求,并與WEB 服務(wù)器通訊以獲取需要的HTML 文件。并按照規(guī)范過(guò)濾此文件,重新組織XML 格式的文件,通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)傳入客戶(hù)端??蛻?hù)端平臺(tái)采用嵌入式Linux,根據(jù)需要自由裁減,經(jīng)XML 解析后,調(diào)用GUI 函數(shù)顯示網(wǎng)頁(yè)。
關(guān)鍵詞:嵌入式瀏覽器;移動(dòng)終端;XML;解析器

引言

移動(dòng)終端受移動(dòng)性和便攜性的制約,CPU 主頻及計(jì)算能力較小,存儲(chǔ)器容量、顯示屏和輸入設(shè)備大小也受到限制。同時(shí),無(wú)線(xiàn)數(shù)據(jù)網(wǎng)帶寬、連接可靠性及網(wǎng)絡(luò)可預(yù)測(cè)性相對(duì)較低, 網(wǎng)絡(luò)時(shí)延比有線(xiàn)網(wǎng)大。如果將移動(dòng)終端通過(guò)無(wú)線(xiàn)方式直接接入Internet,技術(shù)實(shí)現(xiàn)有困難。近年業(yè)界提出:一是重寫(xiě)現(xiàn)有Internet 協(xié)議,使其與現(xiàn)有協(xié)議兼容,讓移動(dòng)設(shè)備透過(guò)微瀏覽器( Micro-Browser) 能通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)使用Internet 上所提供的針對(duì)WAP 特別定制的資訊及服務(wù)。另是將移動(dòng)終端當(dāng)作功能簡(jiǎn)化的PC,并內(nèi)置HTML 瀏覽器,雖可自由訪(fǎng)問(wèn)現(xiàn)有網(wǎng)絡(luò), 但由于現(xiàn)有Internet 網(wǎng)站網(wǎng)頁(yè)大量采用Flash、Shockwave 等技術(shù),導(dǎo)致其體積龐大, 無(wú)線(xiàn)傳輸中耗時(shí)長(zhǎng),還要求移動(dòng)終端具有較強(qiáng)運(yùn)算能力,硬件投入較高。為此,對(duì)上述方式進(jìn)行改進(jìn), 使其既可滿(mǎn)足無(wú)線(xiàn)網(wǎng)絡(luò)傳輸中數(shù)據(jù)量小的要求, 又可讓用戶(hù)獲取現(xiàn)有網(wǎng)絡(luò)上的絕大部分資源。

基于XML 的移動(dòng)終端網(wǎng)絡(luò)瀏覽模型

模型概述

基于XML 的WEB 瀏覽方案是在傳統(tǒng)的客戶(hù)/服務(wù)器瀏覽模式中插入中間層。中間層接收客戶(hù)端的服務(wù)請(qǐng)求,并與WEB 服務(wù)器通訊以獲取所需要的HTML 文件,將此文件按一定規(guī)范進(jìn)行過(guò)濾,去掉客戶(hù)端不需要的標(biāo)簽及內(nèi)容,重新組織成XML格式文件通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)傳送給客戶(hù)端。經(jīng)由XML解析器以后,調(diào)用GUI 圖形接口函數(shù)將網(wǎng)頁(yè)顯示在用戶(hù)界面上。客戶(hù)端瀏覽器的控制部分負(fù)責(zé)響應(yīng)用戶(hù)的請(qǐng)求,并處理與用戶(hù)的交互。其結(jié)構(gòu)如圖1。

 

在無(wú)線(xiàn)網(wǎng)絡(luò)瀏覽中使用XML 的優(yōu)缺點(diǎn)

可擴(kuò)展標(biāo)記語(yǔ)言(XML: eXtensible MarkupLanguage) 是用來(lái)描述其它語(yǔ)言的元語(yǔ)言,定義了應(yīng)用間傳遞數(shù)據(jù)的結(jié)構(gòu), 是能用任何編輯器讀取的文本。利用這種機(jī)制,程序員可制定底層數(shù)據(jù)交換的規(guī)范,并在此基礎(chǔ)上開(kāi)發(fā)整個(gè)系統(tǒng)的各個(gè)模塊,模塊間傳輸符合既定規(guī)則的數(shù)據(jù),適合計(jì)算機(jī)間傳送結(jié)構(gòu)化數(shù)據(jù)。

每種瀏覽器內(nèi)置的文檔解析器是最核心的部分之一,影響瀏覽器的運(yùn)行效率和空間效率。由于XML 統(tǒng)一定義了其文檔解析器的標(biāo)準(zhǔn)接口規(guī)范——DOM( Document Object Model),即文檔對(duì)象模型,使得應(yīng)用程序可按需選擇、更換合適的解析器,無(wú)須對(duì)程序本身做大的改動(dòng)。在瀏覽模型中, 將HTML 解析等計(jì)算量大的任務(wù)交由中間層服務(wù)器完成, 客戶(hù)端進(jìn)行較為簡(jiǎn)單的XML 解析, 符合瘦客戶(hù)機(jī)/ 服務(wù)器的信息應(yīng)用體系模式。當(dāng)前使用XML 最大的問(wèn)題是支持XML 的應(yīng)用程序還不多, 許多具體應(yīng)用還需要開(kāi)發(fā)人員自行設(shè)計(jì)。

中間層實(shí)現(xiàn)的機(jī)制和原理

選擇VC++ 6.0 為中間層的集成開(kāi)發(fā)環(huán)境,中間層運(yùn)行在后臺(tái)服務(wù)器上, 采用模塊化的設(shè)計(jì)。每個(gè)模塊作為一個(gè)常規(guī)動(dòng)態(tài)鏈接庫(kù)( Regular DLL )單元, 由后臺(tái)服務(wù)器需要時(shí)動(dòng)態(tài)加載。

(1) 數(shù)個(gè)無(wú)線(xiàn)MODEM通過(guò)多串口卡連接在后臺(tái)服務(wù)器上構(gòu)成無(wú)線(xiàn)MODEM 池,為多個(gè)移動(dòng)終端用戶(hù)提供服務(wù)??蛻?hù)端與服務(wù)器建立連接時(shí), 先申請(qǐng)MODEM 池中的空閑資源并建立與后臺(tái)服務(wù)器連接, 發(fā)送客戶(hù)端瀏覽器服務(wù)請(qǐng)求,任務(wù)完成后釋放MODEM 資源。如沒(méi)有可用資源,等待一定時(shí)間后重新申請(qǐng)。

(2) 后臺(tái)服務(wù)器通過(guò)有線(xiàn)網(wǎng)絡(luò)接入Internet,使用標(biāo)準(zhǔn)WWW 協(xié)議棧(HTTP、TCP/IP 等)。與WEB 服務(wù)器通訊時(shí)主要使用CInternetSession,CHttpConnection 和ChttpFile 等3 個(gè)MFC 類(lèi)。核心代碼如下:

C I n t e r n e t S e s s i o n s e s s i o n ;

C H t t p C o n n e c t i o n * p S e r v e r = N U L L ;

C H t t p F i l e * p F i l e = N U L L ;

AfxParseURL(pURL,…);

初始化完成后, 將客戶(hù)端的服務(wù)請(qǐng)求轉(zhuǎn)化為標(biāo)準(zhǔn)統(tǒng)一資源定位符( URL : Uniform ResourceLocator ), 并調(diào)用全局函數(shù)AfxParseURL 分析映射此URL。

pServer = session.GetHttpConnection();

pFile = pServer->OpenRequest();

pFile->AddRequestHeaders();

pFile->SendRequest();

打開(kāi)客戶(hù)端請(qǐng)求特定HTTP 連接,向WEB 服務(wù)器發(fā)送相應(yīng)HTTP 請(qǐng)求消息。

pFile->ReadString();

WEB 服務(wù)器返回響應(yīng)消息, 調(diào)用CHttpFile類(lèi)ReadString 函數(shù)取得返回?cái)?shù)據(jù), 完成與WEB 服務(wù)器通訊。

(3) 選擇Dillo project 瀏覽器中的解析引擎作為解析過(guò)濾和組裝模塊的核心, 流程如圖2。

 

HTML 解析部分對(duì)輸入的HTML 數(shù)據(jù)流按HTML 語(yǔ)法特點(diǎn)逐字符分解成三類(lèi):

① Space 數(shù)據(jù)類(lèi)型: 所有ASCII 碼值在0x09- 0x0d 或0x20 的字符代表空格或占位信息。經(jīng)Space_proces 部分處理,以確定其長(zhǎng)度。為保持HTML 排版格式基本不變,此類(lèi)數(shù)據(jù)全部保存在生成的XML 文件中。

② Tag 數(shù)據(jù)類(lèi)型: 表示HTML 數(shù)據(jù)流中的所有標(biāo)簽。由于HTML 語(yǔ)法規(guī)則的限制,必須檢查標(biāo)簽的有效性,例如<input> 標(biāo)簽必須存在于<form>標(biāo)簽之中。為此建立一堆棧存放標(biāo)簽信息,堆棧中的所有元素構(gòu)成了當(dāng)前HTML 文本處的現(xiàn)場(chǎng)信息。遇到新標(biāo)簽,首先按照HTML 語(yǔ)法規(guī)則將新標(biāo)簽與當(dāng)前狀態(tài)信息進(jìn)行比較,確認(rèn)有效后,將當(dāng)前標(biāo)簽信息( 包括標(biāo)簽名及屬性)入棧,在標(biāo)簽結(jié)束處將此信息出棧,此過(guò)程由Tag_process 部分完成。同時(shí)建立一數(shù)組保存需要保留的標(biāo)簽名, 數(shù)組具體元素可根據(jù)用戶(hù)需要進(jìn)行增減。將每個(gè)經(jīng)檢驗(yàn)有效的標(biāo)簽與數(shù)組中元素進(jìn)行逐個(gè)對(duì)比以確定標(biāo)簽是否加入XML 文件中,通過(guò)這樣的篩選, 來(lái)減小無(wú)線(xiàn)傳輸量。

③ Word 數(shù)據(jù)類(lèi)型:需要顯示的文本信息。此部分信息經(jīng)Word_process 處理后,全部加入到XML 文件中。

④ 最后將XML 文件通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)傳輸給客戶(hù)端瀏覽器。由于無(wú)線(xiàn)通訊環(huán)境數(shù)據(jù)傳輸?shù)牟淮_定性和不穩(wěn)定性,定義了HTML 轉(zhuǎn)換模塊通訊子模塊-PDA:

協(xié)議格式:FramHead(0x01)+ASCII 數(shù)據(jù)長(zhǎng)度( 6bytes) 指令+ 空格+ ASICII 數(shù)據(jù)+ FramTail(0x02)

支持指令OK FAIL

其中第一個(gè)字段表示數(shù)據(jù)幀頭第二個(gè)字段表示數(shù)據(jù)總長(zhǎng)度以10 進(jìn)制表示最大不超過(guò)999999字節(jié)指令字段表示中間層服務(wù)器工作狀態(tài)成功則返回OK 最后為幀尾通過(guò)檢驗(yàn)幀頭和幀尾來(lái)確定數(shù)據(jù)傳輸?shù)耐暾院蜏?zhǔn)確性。

經(jīng)測(cè)試經(jīng)過(guò)中間層過(guò)濾掉Java Script 和一些動(dòng)態(tài)圖片并保留了網(wǎng)頁(yè)的主要信息前提下網(wǎng)頁(yè)體積只有原來(lái)的10%左右適宜在GSM 等低速無(wú)線(xiàn)網(wǎng)絡(luò)上傳輸。

客戶(hù)端瀏覽器的實(shí)現(xiàn)機(jī)制

客戶(hù)端平臺(tái)采用嵌入式Linux 工作流程如下

(1) 瀏覽器啟動(dòng)后首先初始化XmlBrowser結(jié)構(gòu)此結(jié)構(gòu)包括瀏覽器當(dāng)前URL 顯示結(jié)構(gòu)入口指針及保存已瀏覽的歷史URL 成員結(jié)構(gòu)體等初始化后通過(guò)客戶(hù)端通訊模塊向中間層發(fā)送請(qǐng)求消息其通訊子模塊中間層服務(wù)器通訊子模塊格式如下:

協(xié)議格式FramHead(0x01) 總長(zhǎng)度(4bytes)指令空格URL 字符串? [POST DATA]

FramTail(0x02)支持指令GET POST HEAD前兩個(gè)字段分別表示幀頭和數(shù)據(jù)長(zhǎng)度后四個(gè)字段遵循HTTP 協(xié)議支持標(biāo)準(zhǔn)HTTP 三種指令最后為幀尾。

(2) 瀏覽器收到中間層返回?cái)?shù)據(jù)后先檢驗(yàn)數(shù)傳中無(wú)數(shù)據(jù)丟失后將此XML 數(shù)據(jù)流送入XML解析器選擇可為Gnome Linux 主要窗口管理環(huán)境之一提供XML 支持的XML Library 中的XML解析器它遵循標(biāo)準(zhǔn)DOM 接口可將DOM 看作標(biāo)準(zhǔn)的連接文檔和應(yīng)用程序或腳本語(yǔ)言的結(jié)構(gòu)體系其提供給用戶(hù)一個(gè)接口以裝載定位操作和序列化XML 文檔基于DOM 的XML 解析器將XML 文檔轉(zhuǎn)換成對(duì)象模型的集合通常為樹(shù)狀結(jié)構(gòu)通過(guò)遍歷整棵樹(shù)來(lái)訪(fǎng)問(wèn)XML 文檔任意處的內(nèi)容和結(jié)構(gòu)信息。

(3) 從XML 解析到XML 文本的顯示步驟

  

從流程圖圖3 可見(jiàn)底層GUI 接口調(diào)用和上層顯示模塊是分開(kāi)的顯示模塊完成對(duì)全部具體元素的顯示信息的計(jì)算后向底層GUI 接口形函數(shù)發(fā)出服務(wù)請(qǐng)求底層GUI 對(duì)服務(wù)請(qǐng)求進(jìn)行響應(yīng)完成屏幕繪制采用該結(jié)構(gòu)應(yīng)用程序開(kāi)發(fā)員無(wú)需了解底層圖形引擎的實(shí)現(xiàn)機(jī)理和技術(shù)細(xì)節(jié)只要保持兩者間的接口不變系統(tǒng)底層圖形函數(shù)庫(kù)的升級(jí)將不會(huì)影響現(xiàn)有軟件。

進(jìn)入顯示的DOM 數(shù)據(jù)流元素分為兩類(lèi)一類(lèi)是在屏幕顯示區(qū)域上顯示的對(duì)象如輸入框<input> 鏈接<a>和文本等元素另類(lèi)為Container容器如表格行<tr> 表格單元<td> 等元素不顯示在屏幕上每個(gè)顯示對(duì)象都處在特定Container中以此來(lái)確定它與其它顯示對(duì)象間的相對(duì)位置關(guān)系整個(gè)屏幕顯示區(qū)域視為最外層的容器包含了實(shí)際顯示對(duì)象和下層容器以此類(lèi)推構(gòu)成了整個(gè)顯示結(jié)構(gòu)顯示結(jié)構(gòu)完成后計(jì)算每個(gè)元素的實(shí)際顯示位置通過(guò)遍歷整個(gè)顯示結(jié)構(gòu)依據(jù)顯示區(qū)域長(zhǎng)寬計(jì)算每個(gè)顯示對(duì)象的坐標(biāo)超出顯示區(qū)域長(zhǎng)度的部分使用滾動(dòng)條來(lái)訪(fǎng)問(wèn)。

(4) 瀏覽器與用戶(hù)交互的管理

該管理由瀏覽器的虛擬控制器完成瀏覽器的整個(gè)屏幕除了頁(yè)面顯示區(qū)域外還分為滾動(dòng)條和系統(tǒng)區(qū)域系統(tǒng)區(qū)域上為用戶(hù)提供了一些定制的功能如前進(jìn)后退頁(yè)面刷新等通過(guò)點(diǎn)擊滾動(dòng)條區(qū)域可以上下移動(dòng)屏幕。

結(jié)束語(yǔ)

基于XML 的移動(dòng)終端網(wǎng)絡(luò)瀏覽方案既考慮到現(xiàn)有網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu)以HTML 為主的現(xiàn)狀又可滿(mǎn)足未來(lái)網(wǎng)絡(luò)向XML 方向發(fā)展的趨勢(shì)并已在我所自行研發(fā)的移動(dòng)終端上運(yùn)行成功滿(mǎn)足了流動(dòng)性很強(qiáng)的特殊行業(yè)對(duì)信息瀏覽和查詢(xún)的需要。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉