新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在和欣操作系統(tǒng)上實(shí)明的 WEB SERVICE組件

在和欣操作系統(tǒng)上實(shí)明的 WEB SERVICE組件

作者: 時(shí)間:2008-01-22 來(lái)源:網(wǎng)絡(luò) 收藏
摘要 “和欣”嵌入式是基于CAR構(gòu)件技術(shù)、支持構(gòu)件化應(yīng)用的,是國(guó)家863支持的TD-SCDMA的標(biāo)準(zhǔn)。本文利用“和欣”嵌入式操作系統(tǒng)提供的一系列API及其CAR技術(shù),實(shí)現(xiàn)了一個(gè)在“和欣”嵌入式操作系統(tǒng)上部署和提供
關(guān)鍵詞 “和欣”嵌入式操作系統(tǒng) CAR


引 言
嵌入式Internet是近幾年隨著嵌入式系統(tǒng)的廣泛應(yīng)用和計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展而興起的一項(xiàng)技術(shù)。嵌入式系統(tǒng)憑借其以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪的特點(diǎn),贏(yíng)得了巨大的市場(chǎng),在應(yīng)用數(shù)量上遠(yuǎn)遠(yuǎn)超過(guò)了各種通用計(jì)算機(jī)。隨著Internet的發(fā)展,各種設(shè)備都產(chǎn)生了連接性的需求,從冰箱到電表,似乎所有電器都需要連入因特網(wǎng)。通過(guò)為現(xiàn)有嵌入式系統(tǒng)增加因特網(wǎng)接入能力來(lái)擴(kuò)展其功能,以Internet為介質(zhì)實(shí)現(xiàn)信息交互的過(guò)程,這就產(chǎn)生了嵌入式Intefnet技術(shù)。
當(dāng)前,在諸多的嵌入式操作系統(tǒng)上開(kāi)發(fā)應(yīng)用的模式與傳統(tǒng)的桌面應(yīng)用開(kāi)發(fā)方式相差無(wú)幾,基本上采用強(qiáng)類(lèi)型的系統(tǒng)編程語(yǔ)言(如C、Java)及其相應(yīng)的開(kāi)發(fā)模式來(lái)進(jìn)行。隨著嵌入式設(shè)備特別是移動(dòng)設(shè)備的逐漸普及,這些設(shè)備上的應(yīng)用需求量遠(yuǎn)遠(yuǎn)大于桌面應(yīng)用的需求量,應(yīng)用的變化速度也相當(dāng)驚人。傳統(tǒng)模式的開(kāi)發(fā)周期長(zhǎng)的弱點(diǎn)就暴露了出來(lái),因此在應(yīng)用開(kāi)發(fā)中應(yīng)引入新的開(kāi)發(fā)模式以適應(yīng)新形勢(shì)的發(fā)展。
但是在家電高度智能化的今天,僅僅對(duì)傳統(tǒng)的計(jì)算機(jī)進(jìn)行軟件集成是不夠的,還必須考慮到各種嵌入式設(shè)備。如何讓各種手機(jī)、PDA使用原先只有傳統(tǒng)計(jì)算機(jī)才能實(shí)現(xiàn)的服務(wù),如何將電視機(jī)、微波爐等家電無(wú)縫集成到分布式系統(tǒng)中而不再需要驅(qū)動(dòng),這些都對(duì)計(jì)算機(jī)軟件體系提出了新的挑戰(zhàn)。本文利用“和欣”嵌入式操作系統(tǒng)的構(gòu)件解決了上述問(wèn)題。


1 和欣嵌入式操作系統(tǒng)和CAR構(gòu)件技術(shù)
1.1 和欣嵌入式操作系統(tǒng)
“和欣”嵌入式操作系統(tǒng)是一個(gè)我國(guó)完全自主研發(fā)、完全自主知識(shí)產(chǎn)權(quán)的國(guó)際先進(jìn)的嵌入式操作系統(tǒng),在國(guó)內(nèi)是最適合嵌入式設(shè)備搭建而向服務(wù)軟件結(jié)構(gòu)基礎(chǔ)的嵌入式操作系統(tǒng)。
“和欣”嵌入式操作系統(tǒng)是一個(gè)基于構(gòu)件化軟件模型的系統(tǒng),構(gòu)件化軟件設(shè)計(jì)思想貫穿于整個(gè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)中。系統(tǒng)實(shí)現(xiàn)本身就是構(gòu)件模式,除內(nèi)核中最底層的控制部分外,所有系統(tǒng)功能都是以構(gòu)件接口形式提供的。另外,操作系統(tǒng)為構(gòu)件化軟件模型提供了必要的運(yùn)行環(huán)境,來(lái)源不同的構(gòu)件可以在該環(huán)境上實(shí)現(xiàn)互操作。系統(tǒng)提供了構(gòu)件自動(dòng)尋址/自動(dòng)加載機(jī)制,用戶(hù)不必知道調(diào)用的構(gòu)件程序是本地的還是來(lái)自子網(wǎng)上。也就是說(shuō),構(gòu)件運(yùn)行環(huán)境可以對(duì)用戶(hù)透明,構(gòu)件化系統(tǒng)的實(shí)現(xiàn),使得操作系統(tǒng)本身具有高度的靈活性和擴(kuò)展性。“和欣”采用的構(gòu)件技術(shù)是CAR技術(shù)。
1.2 CAR構(gòu)件技術(shù)
CAR(Component Application Run-Time)是一個(gè)國(guó)內(nèi)自主知識(shí)產(chǎn)權(quán)的構(gòu)件系統(tǒng),是由上??铺┦兰o(jì)科技有限公司開(kāi)發(fā)的新一代的構(gòu)件系統(tǒng)。其主要特點(diǎn)是從操作系統(tǒng)層面上引入“構(gòu)件”的概念,所有的服務(wù)都由構(gòu)件來(lái)提供,從而實(shí)現(xiàn)軟件的目標(biāo)代碼級(jí)的重用。CAR是新一代的構(gòu)件系統(tǒng),為網(wǎng)絡(luò)編程和網(wǎng)絡(luò)服務(wù)提供了強(qiáng)大的支持。同時(shí),CAR是一個(gè)面向構(gòu)件的編程模型,它表現(xiàn)為一組編程規(guī)范,包括構(gòu)件、類(lèi)、對(duì)象、接口等定義與訪(fǎng)問(wèn)構(gòu)件對(duì)象的規(guī)定。

2 在“和欣”上實(shí)現(xiàn)WEB SERVICE
2.1 “和欣”WEB SERVICE總體架構(gòu)

“和欣”WEB SERVICE組件主要由以下幾部分組成:XML解析器(此處僅實(shí)現(xiàn)了1個(gè)DOM解析器),1個(gè)基于XML解析器的SOAP文檔解析器,1個(gè)基于XML解析器的WSDL文檔解析器和生成器,1個(gè)CGI(作為HTTP服務(wù)器)以及1個(gè)基于XML解析器的WEB SERVICE配置文檔解析器。總體上WEB SERVICE提供的組件如圖l所示。

整個(gè)組件的主程序就是一個(gè)CGI的HTTP服務(wù)器,在啟動(dòng)時(shí)就調(diào)用配置文件解析器。配置文件是一個(gè)XML文檔,用于配置和發(fā)布WEB SERVICE方法,包括HTTP服務(wù)的端口號(hào),系統(tǒng)中的WEB SERVICE方法(將是一些CAR組件)及其調(diào)用方式和輸入/輸出參數(shù)等。之后就把這些內(nèi)容存放在內(nèi)存中,對(duì)配置的SOCKET端口進(jìn)行偵聽(tīng),等待HTTP請(qǐng)求。HTTP服務(wù)器接收的HTTP WEBSERVICE請(qǐng)求包括HTTP GET/POST和SOAP兩種,服務(wù)器接收到SOAP請(qǐng)求之后就通過(guò)SOAP解析器進(jìn)行解析,確定調(diào)用的是哪個(gè)WEB SERVICE方法,找到后就調(diào)用相應(yīng)的CAR組件,并輸入?yún)?shù);用SOAP解析器將得到的結(jié)果包裝成一個(gè)結(jié)果SOAP文檔,然后從原端口返回給客戶(hù)。
這里只提供了簡(jiǎn)單的SOAP接口解析,要進(jìn)行客戶(hù)端編程時(shí)可以使用;而且“和欣”嵌入式操作系統(tǒng)上已有標(biāo)準(zhǔn)瀏覽器,只需要改動(dòng)部分代碼,即可直接使用。
以下就仔細(xì)介紹各部分的實(shí)現(xiàn)和提供的API。
2.2 XML解析器
選定DOM解析器實(shí)現(xiàn),暫時(shí)不提供SAX接口。因?yàn)樵谇度胧较到y(tǒng)上提供的WEB SERVICE文檔通常不大,所以采用DOM不會(huì)出現(xiàn)效率問(wèn)題。
“和欣”DOM API的實(shí)現(xiàn)參照了W3上的DOM規(guī)范,由于是嵌入式系統(tǒng)的關(guān)系,對(duì)W3的開(kāi)源代碼xercesc接口進(jìn)行了裁剪和變更。
另外在編寫(xiě)DOM接口之前,參照MFC的String類(lèi)編寫(xiě)了一個(gè)簡(jiǎn)單的String類(lèi),包含最基本的字符串操作。其中字符串全部使用UTF-8存儲(chǔ),具體函數(shù)參照MFC的String類(lèi),這里不在贅述。
“和欣”DOM API的主要“類(lèi)”包括:
①Decument類(lèi)。Document對(duì)象代表了整個(gè)XML的文檔。所有其他的Node,都以一定的順序包含在Docu-ment對(duì)象之內(nèi),排列成一個(gè)樹(shù)形的結(jié)構(gòu)。
②Node類(lèi)。Node對(duì)象是DOM結(jié)構(gòu)中最為基本的對(duì)象,代表了文檔樹(shù)中的一個(gè)抽象節(jié)點(diǎn)。在實(shí)際使用時(shí),很少會(huì)真正地用到Node對(duì)象,而是使用諸如Element、Attr、Text等Node對(duì)象的子對(duì)象來(lái)操作文檔。Node對(duì)象為這些對(duì)象提供了一個(gè)抽象的、公共的根。雖然在Node對(duì)象中定義了對(duì)其子節(jié)點(diǎn)進(jìn)行存取的方法,但是有一些Node子對(duì)象(如Text對(duì)象)并不存在子節(jié)點(diǎn),這一點(diǎn)是要注意的。
③NodeList類(lèi)。NodeList類(lèi),顧名思義,就是代表了一個(gè)包含了一個(gè)或者多個(gè)Node的列表??梢院?jiǎn)單地把它看作一個(gè)Nodc的數(shù)組,僅僅是為了方便Node中的某些函數(shù)使用。
④Element類(lèi)。Element類(lèi)代表的是XML文檔中的標(biāo)簽元素,繼承于Node,也是Node最主要的子類(lèi)。在標(biāo)簽中可以包含有屬性,因而Element對(duì)象中有存取其屬性的方法,而任何Node中定義的方法,也可以用在Element對(duì)象上。
⑤Attr類(lèi)。Attr類(lèi)代表了某個(gè)標(biāo)簽中的屬性,繼承于Node。
這是一個(gè)簡(jiǎn)化的DOM解析器,大大降低了代碼的復(fù)雜度。由于在嵌入式設(shè)備中存儲(chǔ)空間甚至比內(nèi)存都寶貴,所以XML文件不會(huì)很大,雖然有一些在大XML文件中會(huì)降低效率的修改,但是在實(shí)際使用中不會(huì)有影響。
2.3 SOAP解析器
擁有了DOM解析器,可以方便地構(gòu)造一個(gè)SOAP解析器,用來(lái)解析SOAP文件,得到客戶(hù)端的SOAP請(qǐng)求以及解析得到SOAP中的結(jié)果。同時(shí),也可以把結(jié)果數(shù)據(jù)包裝成SOAP文件,返回給服務(wù)器端。
“和欣”SOAP API的主要“類(lèi)”包括:
①Soapheader類(lèi)。Soapheader類(lèi)繼承自Doeunaent類(lèi),Decument類(lèi)的方法它都可以使用。Soapheader類(lèi)主要是處理Actor和MustUnderstand兩個(gè)屬性。
②Soapbody類(lèi)。Soapbodyr類(lèi)繼承自Document類(lèi)。它的處理比較復(fù)雜,暫時(shí)直接使用Document類(lèi)的方法,只有一個(gè)產(chǎn)生錯(cuò)誤SCIAP的方法。
③Soapclass類(lèi)。Soapclass類(lèi)繼承自Document類(lèi),Document類(lèi)的方法它都可以使用;另外它利用Soapheader和Soapbody類(lèi)做一些額外的操作以降低代碼復(fù)雜度(Soapbody類(lèi)現(xiàn)在還沒(méi)什么用)。Soapclass類(lèi)有一些包裝用的函數(shù),以降低編程復(fù)雜度。
2.4 WEB SERVICE部署文件
前面已經(jīng)說(shuō)過(guò),WEB SERVICE方法由CAR組件的形式編寫(xiě)。那么如何讓HTTP服務(wù)器找到并且動(dòng)態(tài)裝載這些WEB SERVICE方法,如何確定輸入/輸出參數(shù),HTTP服務(wù)器又將運(yùn)行在什么端口上呢?這些都需要人為進(jìn)行配置。所以定義一個(gè)WEB SERVICE的部署文件,以便在“和欣”上配置WEB SERVICE。WEB SERVICE部署文件的結(jié)構(gòu)如下:


其中:domainname是指本機(jī)的域名;seTvicesocket則是指HTTP CGI在哪個(gè)端口進(jìn)行偵聽(tīng),啟動(dòng)服務(wù)時(shí)會(huì)首先檢查這一項(xiàng),默認(rèn)為80??梢源嬖诙鄠€(gè)soapaction>,每一個(gè)對(duì)應(yīng)一個(gè)相應(yīng)的WEB SERVICE方法;屬性u(píng)ri是相對(duì)路徑,加上服務(wù)器的IP或者足域名可以組成整個(gè)URL。dllname是指相應(yīng)的CAR編譯成的DLL的名字,這樣HTTP CGI解析到相應(yīng)的WEB SERVICE方法,就可以直接裝載褶應(yīng)的DLL。但是注意DLL一定要注冊(cè)過(guò),才能被程序正確加載。如果這個(gè)函數(shù)是一個(gè)類(lèi)的成員函數(shù),那么這個(gè)類(lèi)的名稱(chēng)必須在classname>中指出。function>就是要調(diào)用的CAR的方法。uuid>是這種方法的UUID,供以后擴(kuò)展時(shí)使用。后面的Params>表示這個(gè)函數(shù)有幾個(gè)參數(shù),后面的3個(gè)參數(shù)表示變量名(在實(shí)際調(diào)用中投有什么用)、變量類(lèi)型以及變量是輸入還是輸出,由于CAR接口的函數(shù)返回值都是HRESULT,所以沒(méi)有返同值的設(shè)置。
2.5 WSDL組件
UDDI和WSDL是WEB SERVICE系列協(xié)議的精華部分,正是由于這兩個(gè)協(xié)議的出現(xiàn),才可以由程序動(dòng)態(tài)地使用別人發(fā)布的WEB SERVICE方法。但是現(xiàn)在UDDI還沒(méi)有和DNS一樣普及起來(lái),所以在“和欣”WEB SERVICE中的處理方法,設(shè)置一個(gè)GETWSDL的WEB SERVICE方法。這種方法的作用就是根據(jù)配置文件生成在此機(jī)器上提供的WSDL文件,并且返回給請(qǐng)求的客戶(hù)端。這樣客戶(hù)端程序就可以根據(jù)WSDL來(lái)查找相應(yīng)的方法。
2.6 HTTP服務(wù)器
這個(gè)部件其實(shí)是在整個(gè)“和欣”WEB SERVICE組件中的主程序部分,啟動(dòng)分析配置文件、監(jiān)聽(tīng)網(wǎng)絡(luò)端口,分析HTTP請(qǐng)求.動(dòng)態(tài)調(diào)用CAR DLL中的函數(shù),調(diào)用SDAP和DOM組件把結(jié)果包裝成SOAP返回客戶(hù)端,都是此部件的功能。首先簡(jiǎn)單介紹一下“和欣”網(wǎng)絡(luò)編程接口(e1asock API)
“和欣”提供了一組套接口函數(shù)用于網(wǎng)絡(luò)編程,統(tǒng)稱(chēng)為elasock API。與wlnsock一樣,“和欣”的elasock也是從BSD socket發(fā)展而來(lái)的。elasock APl可以實(shí)現(xiàn)基本的網(wǎng)絡(luò)通信功能,具體用法參見(jiàn)每個(gè)函數(shù)的文檔。elasock與Wiosock基本兼容?!昂托馈碧峁┑膃lasock的錯(cuò)誤代碼與winsock有些不同。
有了elasock API和上述開(kāi)發(fā)的部件,利用“和欣”CAR技術(shù)可以構(gòu)造此部件。此部件的運(yùn)行流程如圖2所示。

首先啟動(dòng)主函數(shù),分析部署文件有哪些WEB SERVICE方法,再找出監(jiān)聽(tīng)端口,監(jiān)聽(tīng)HTTP請(qǐng)求。此請(qǐng)求包括直接的HTTP GET/POST方式的請(qǐng)求和SOAP方式的請(qǐng)求。如果檢測(cè)到合法的請(qǐng)求,就到解析過(guò)的部署文件中去尋找相應(yīng)的WEB SERVICE方法;如果沒(méi)有找到或者出了其他問(wèn)題,就返回一個(gè)SOAP錯(cuò)誤給客戶(hù)端。

如果一切正常,就到解析過(guò)的部署文件巾尋找相應(yīng)的CAR方法,動(dòng)態(tài)加載,運(yùn)行相應(yīng)的函數(shù),得到結(jié)果,并且把結(jié)果包裝成SOAP協(xié)議,返回給客戶(hù)端。主程序在一個(gè)循環(huán)內(nèi)一直監(jiān)聽(tīng)此端口,直到程序關(guān)閉。


3 總結(jié)與展望
本文利用“和欣”嵌入式操作系統(tǒng)的SDK和CAR原理,構(gòu)造了一個(gè)XML和WEB SERVICE組件。通過(guò)這個(gè)組件,可以開(kāi)發(fā)一個(gè)CAR作為WEB SERVICE方法,再在WEB SERVICE部署文件中配置此CAR,就可以簡(jiǎn)單地在WEB SERVICE組件中發(fā)布此方法。
“和欣”嵌入式操作系統(tǒng)現(xiàn)在可以運(yùn)行在x86、ARM等CPU上,且科泰世紀(jì)同濟(jì)大學(xué)基礎(chǔ)軟件中心的其他同事已經(jīng)針對(duì)數(shù)字電視和對(duì)智能手機(jī)實(shí)現(xiàn)了“和欣”嵌入式操作系統(tǒng)的裁剪,使“和欣”嵌入式操作系統(tǒng)能夠順利地運(yùn)行在數(shù)字電視和手機(jī)上。所以可以簡(jiǎn)單地把寫(xiě)好的CAR作為WEB SERVICE方法發(fā)布在經(jīng)過(guò)裁剪的“和欣”嵌入式操作系統(tǒng)上,就可以使得數(shù)字電視和智能手機(jī)擁有直接提供XML based WEB SERVICE的方法。在不久的將來(lái),隨著我國(guó)信息化進(jìn)程的加快,很快就會(huì)有大量的內(nèi)嵌“和欣”、使用WEB SERVICE的智能電器出現(xiàn),并且深入我國(guó)生產(chǎn)和生活的方方面面,為提高生產(chǎn)力、提高人民生活水平起到極大的推動(dòng)作用。

linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)


關(guān)鍵詞: 組件 SERVICE WEB 操作系統(tǒng)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉