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