XMLHttP對(duì)象在嵌入式Web實(shí)時(shí)系統(tǒng)中的應(yīng)用
由于Web頁中可能有多個(gè)不同按鈕要發(fā)送不同的控制命令,為簡化程序設(shè)計(jì)且便于管理對(duì)象,可將每一按鈕調(diào)用該函數(shù)創(chuàng)建的xMLHttp對(duì)象統(tǒng)一保存到全局對(duì)象數(shù)組ObjArray中。對(duì)象數(shù)組ObjArray由Web頁中的Javascript腳本定義,即:
script language=“Javascript”>
var ObjArray=new Array;……
(2)mReadyCallBack()
它是Send_Control_CMD函數(shù)所創(chuàng)建的保存于對(duì)象數(shù)組ObjArray中的每個(gè)XMLHttp對(duì)象的異步回調(diào)函數(shù),通過該函數(shù)可統(tǒng)一異步處理服務(wù)器回應(yīng)數(shù)據(jù)。函數(shù)具體實(shí)現(xiàn)如下:
當(dāng)ObjArray中的任意一個(gè)XMLHttp對(duì)象的就緒狀態(tài)變化時(shí),將觸發(fā)對(duì)mReadyCallBack函數(shù)的異步調(diào)用,該函數(shù)將通過for循環(huán)掃描對(duì)象數(shù)組ObjArray,對(duì)HTTP服務(wù)器當(dāng)前回應(yīng)的對(duì)象進(jìn)行處理。通過XMLHttp對(duì)象的responseText屬性可獲取服務(wù)器回應(yīng)信息,通過Web容器的inner HTML屬性可將回應(yīng)信息顯示到Web頁中。在處理完當(dāng)前XMLHttp對(duì)象以后,mReadyCallBack最終將用delete釋放該對(duì)象所占用的資源。如果調(diào)用Send_control_CMD函數(shù)時(shí)第2個(gè)參數(shù)為空,則表示發(fā)出控制命令后不需要處理服務(wù)器回應(yīng)文本信息,回調(diào)函數(shù)僅僅需要釋放該對(duì)象所占用的資源。
1.1.3 實(shí)現(xiàn)客戶端實(shí)時(shí)監(jiān)測功能的函數(shù)
(1)RealTime_Monitoring()
該函數(shù)專門用于實(shí)時(shí)監(jiān)測動(dòng)態(tài)數(shù)據(jù),它由Web頁面加載事件onLoad觸發(fā)調(diào)用,通過所創(chuàng)建的xMLHttp對(duì)象向服務(wù)器請(qǐng)求動(dòng)態(tài)文件Status.cgi,以獲取監(jiān)測數(shù)據(jù)。
其中xmlhttp定義為全局變量。
(2)aReadyCallBack()
該函數(shù)是實(shí)時(shí)監(jiān)測系統(tǒng)外設(shè)數(shù)據(jù)函數(shù)RealTime_Monitoring所創(chuàng)建的XMLHttp對(duì)象的專用回調(diào)函數(shù),它在處理HTTP服務(wù)器回應(yīng)時(shí)將返回的動(dòng)態(tài)監(jiān)測數(shù)據(jù)顯示在ID為“txtStatus”的Web容器中,譬如span id=“txtStatus”>…/span>,所返回的內(nèi)容將替換其中的“…”。函數(shù)具體實(shí)現(xiàn)如下:
回調(diào)函數(shù)aReadyCallBack與回調(diào)函數(shù)mReadyCallBack的差別在于:它釋放已經(jīng)處理回應(yīng)的XMLHttp對(duì)象(置為null)以后,接著執(zhí)行了一項(xiàng)重要工作,即調(diào)用實(shí)時(shí)監(jiān)測函數(shù)RealTime_Monitoring()。通過創(chuàng)建新的XMLhttp對(duì)象,將動(dòng)態(tài)請(qǐng)求與顯示刷新“接力”進(jìn)行下去,從而使實(shí)時(shí)監(jiān)測無限延續(xù)。
顯然,通過XMLHttp對(duì)象所實(shí)現(xiàn)的實(shí)時(shí)監(jiān)測,其效果遠(yuǎn)遠(yuǎn)優(yōu)于傳統(tǒng)的Web請(qǐng)求與響應(yīng)操作模式下所使用的通過在網(wǎng)頁頭部加入meta http-equiv=“refresh”content=“定時(shí)長度”>,或者使用Javascript的setTimeout函數(shù)設(shè)置超時(shí)值,使客戶端自動(dòng)按固定時(shí)間間隔請(qǐng)求服務(wù)器刷新顯示動(dòng)態(tài)信息的方法。
1.2 客戶端Web與嵌入式HTTP服務(wù)器的交互操作
有了上述以XMLHttp對(duì)象為中心的函數(shù)定義,完成客戶端Web與嵌入式HTTP服務(wù)器之間的交互操作就很容易了,例如:
①通過Web頁按鈕啟動(dòng)電機(jī).可有input type=“button”onClick=“Send_Ctrl_CMD(’0?1=MOTOR’,’)”value=“運(yùn)行”>。按鈕事件觸發(fā)對(duì)Send_Control_CMD的調(diào)用,它通過XMLHttp對(duì)象在“后臺(tái)”發(fā)送命令串“O?1=MOTOR”,提交給嵌入式系統(tǒng)HTTP服務(wù)器處理,控制電機(jī)啟動(dòng),實(shí)現(xiàn)遠(yuǎn)程控制功能。
②實(shí)時(shí)監(jiān)測嵌入式系統(tǒng)外設(shè)狀態(tài),可有body onLoad=“ReaITime Monitoring();”>。Web頁面加載事件onLoad觸發(fā)對(duì)RealTime_Monit oring的函數(shù)調(diào)用,它同樣也通過XMLHttp對(duì)象訪問嵌入式系統(tǒng)HTTP服務(wù)器,不同的是它所請(qǐng)求的是動(dòng)態(tài)文件status.cgi。現(xiàn)假設(shè)所訪問的動(dòng)態(tài)文件主要內(nèi)容如下:
td width=“150”>%02/td>
td width=“200”>LED1:%00 LED2:%01/td>
td width=“168”>%10/td>
嵌入式系統(tǒng)HTTP服務(wù)器程序?qū)腗PFS文件系統(tǒng)讀取該動(dòng)態(tài)文件并將其發(fā)往客戶端。在發(fā)送過程中,HTTP服務(wù)器將對(duì)所遇到的形如“%xx”的變量碼進(jìn)行解析處理。例如“%02”被定義為測試電路中AN0通道的A/D值,“%00”“%01”被定義為兩個(gè)外接LED的開關(guān)狀態(tài),“%10”被定義為所控制的直流電機(jī)的啟/停狀態(tài)。經(jīng)過HTTP服務(wù)器處理后的變量值將被系統(tǒng)當(dāng)前實(shí)際的外設(shè)狀態(tài)值所替換并返回到客戶端。
由于RealTime_Monitoring函數(shù)與aReadyCallBack函數(shù)配合實(shí)現(xiàn)了XMLHttp對(duì)象的創(chuàng)建、請(qǐng)求、異步響應(yīng)、釋放,再創(chuàng)建、再請(qǐng)求、再異步響應(yīng)、再釋放等,從而借助XMLHttp對(duì)象在“后臺(tái)”實(shí)現(xiàn)了理想的實(shí)時(shí)監(jiān)測功能。由于監(jiān)測結(jié)果實(shí)時(shí)刷新顯示在Web中的特定容器位置,不會(huì)導(dǎo)致全頁刷新問題,這也為用戶操作帶來了良好體驗(yàn)。
解決了客戶端通過XMLHttp塒象在“后臺(tái)”與HTTP服務(wù)器進(jìn)行交互、發(fā)送控制命令及異步處理回應(yīng)、實(shí)現(xiàn)實(shí)時(shí)監(jiān)測功能的問題以后,接著要解決的是HTTP服務(wù)器端如何處理客戶端XMLHttp對(duì)象所發(fā)送的控制命令,以及如何處理并返回客戶端XMLHttp對(duì)象所請(qǐng)求的動(dòng)態(tài)文件。 linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論