基于嵌入式Linux的遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)
3.2 應(yīng)用程序設(shè)計(jì)
3.2.1 C/S(Client/Server)模式與B/S(Browser/Server)模式傳統(tǒng)的C/S模式采用兩層設(shè)計(jì),客戶應(yīng)用層負(fù)責(zé)提供交互界面,實(shí)現(xiàn)應(yīng)用邏輯以發(fā)送數(shù)據(jù)、請(qǐng)求并處理返回?cái)?shù)據(jù);數(shù)據(jù)庫(kù)服務(wù)器層負(fù)責(zé)處理客戶數(shù)據(jù)請(qǐng)求并返回結(jié)果,有效管理系統(tǒng)資源。該模式需獨(dú)立開發(fā)和安裝每個(gè)應(yīng)用,系統(tǒng)升級(jí)維護(hù)困難,客戶機(jī)負(fù)擔(dān)重。此外,與數(shù)據(jù)庫(kù)的直接交互導(dǎo)致應(yīng)用程序?qū)?shù)據(jù)結(jié)構(gòu)有很強(qiáng)的依賴性,且浪費(fèi)數(shù)據(jù)庫(kù)連接資源。
基于二層結(jié)構(gòu)的C/S模式無(wú)法適應(yīng)Internet網(wǎng)絡(luò)的特性,因此出現(xiàn)了一種新的體系結(jié)構(gòu)——B/S模式。B/S是一種基于Hyperlink,HTML,Java的三級(jí)或多級(jí)C/S,客戶端僅需要單一的瀏覽器軟件,其它大量工作都由Web Sever完成。B/S模式使用簡(jiǎn)單、易于維護(hù)、擴(kuò)展性好,已逐漸成為主流。
3.2.2 客戶端工作過(guò)程
該系統(tǒng)使用的是B/S模式,對(duì)客戶端幾乎沒(méi)有特別要求。客戶端只要基于普通Windows視窗系統(tǒng),安裝IE或Netscape即可。換句話說(shuō),任何一臺(tái)上網(wǎng)的計(jì)算機(jī),都可能成為客戶端。
客戶端的工作過(guò)程如下:通過(guò)Internet/Intranet網(wǎng)絡(luò)訪問(wèn)監(jiān)控中心的主頁(yè),根據(jù)需要輸入用戶名和密碼,檢驗(yàn)成功則進(jìn)入Web Server系統(tǒng)的監(jiān)控界面,點(diǎn)擊相應(yīng)的設(shè)備按鈕可以獲得該設(shè)備的運(yùn)行狀態(tài)并可以對(duì)設(shè)備的參數(shù)進(jìn)行設(shè)置。
3.2.3 服務(wù)器端程序的設(shè)計(jì)
(1)服務(wù)器模式
為了進(jìn)行服務(wù)器端程序的設(shè)計(jì),首先要確定服務(wù)器的工作模型。我們知道,Linux系統(tǒng)網(wǎng)絡(luò)服務(wù)器主要分為兩種:循環(huán)服務(wù)器(Iterative Server)和并發(fā)服務(wù)器(ConcurrentServer)。循環(huán)服務(wù)器在同一時(shí)刻只能處理一個(gè)客戶機(jī)請(qǐng)求,而并發(fā)服務(wù)器在同一時(shí)刻可以處理多個(gè)客戶機(jī)請(qǐng)求。TCP套接字大多采用并發(fā)服務(wù)器提供服務(wù)。TCP并發(fā)服務(wù)器有多種實(shí)現(xiàn)方法:
·服務(wù)器對(duì)每個(gè)接收到的客戶連接都創(chuàng)建一個(gè)新的子進(jìn)程來(lái)處理客戶請(qǐng)求;
·服務(wù)器預(yù)先創(chuàng)建多個(gè)子進(jìn)程,由這些子進(jìn)程處理客戶機(jī)的請(qǐng)求。這種方式稱為“預(yù)創(chuàng)建(prefork)”服務(wù)器;
·服務(wù)器用函數(shù)select實(shí)現(xiàn)對(duì)多個(gè)客戶機(jī)連接的多路復(fù)用;
·由超級(jí)服務(wù)器(Inetd)激活的服務(wù)器。
其中,一個(gè)子進(jìn)程對(duì)應(yīng)一個(gè)客戶機(jī)的服務(wù)器模型很簡(jiǎn)單,父進(jìn)程完成接收連接和創(chuàng)建子進(jìn)程的任務(wù),子進(jìn)程處理客戶機(jī)的具體請(qǐng)求,每個(gè)子進(jìn)程的處理過(guò)程完全獨(dú)立。
這種服務(wù)器可以同時(shí)處理的客戶機(jī)數(shù)目受到系統(tǒng)所允許的最大子進(jìn)程數(shù)目的限制。這種服務(wù)器的缺點(diǎn)是,為每一個(gè)客戶創(chuàng)建一個(gè)子進(jìn)程的開銷比較大。但如果我們能考慮到實(shí)際情況,并加以適當(dāng)?shù)淖兓?,就?huì)發(fā)現(xiàn),它很適合我們的系統(tǒng)。首先,該系統(tǒng)是一個(gè)監(jiān)控系統(tǒng),決定了不會(huì)有過(guò)多客戶同時(shí)發(fā)出監(jiān)控命令,所以無(wú)須擔(dān)心出現(xiàn)系統(tǒng)資源被耗盡的情況;其次,客戶一旦進(jìn)行監(jiān)控,一般會(huì)持續(xù)較長(zhǎng)時(shí)間,這種創(chuàng)建子進(jìn)程的開銷對(duì)服務(wù)器效率影響不大;最后,如果系統(tǒng)在Internet上運(yùn)行,可能會(huì)有許多外來(lái)的好奇者想進(jìn)入,為了減少開銷,在系統(tǒng)設(shè)計(jì)中,并不是一旦建立連接就創(chuàng)建子進(jìn)程,而是當(dāng)口令通過(guò)后并向系統(tǒng)發(fā)出ASP請(qǐng)求才建立子進(jìn)程。
?。?)程序設(shè)計(jì)
根據(jù)我們的方案,服務(wù)器所需做的工作是:通過(guò)串口對(duì)設(shè)備進(jìn)行數(shù)據(jù)的收發(fā);對(duì)數(shù)據(jù)進(jìn)行處理;將處理的數(shù)據(jù)交給Web Server子進(jìn)程;子進(jìn)程將數(shù)據(jù)顯示到Web頁(yè)下傳給客戶,并接收客戶的參數(shù)設(shè)置命令,將參數(shù)設(shè)置上傳到遠(yuǎn)程設(shè)備。
服務(wù)器程序結(jié)構(gòu)如圖4所示,父進(jìn)程首先創(chuàng)建一個(gè)子進(jìn)程專門處理數(shù)據(jù),然后再根據(jù)用戶的請(qǐng)求創(chuàng)建相對(duì)應(yīng)的子進(jìn)程。用戶子進(jìn)程與串口數(shù)據(jù)處理子進(jìn)程之間采用進(jìn)程間通信來(lái)實(shí)現(xiàn)數(shù)據(jù)交換。
服務(wù)器啟動(dòng)之后的第一件事,就是創(chuàng)建專用子進(jìn)程來(lái)收發(fā)數(shù)據(jù)。服務(wù)器任何時(shí)刻都在*用戶請(qǐng)求。若用戶發(fā)出監(jiān)控請(qǐng)求,而且通過(guò)了密碼校驗(yàn),服務(wù)器就會(huì)產(chǎn)生一個(gè)子進(jìn)程來(lái)處理該用戶的請(qǐng)求:發(fā)送數(shù)據(jù),接收設(shè)置等。
4 結(jié)束語(yǔ)
身處信息社會(huì),人們已經(jīng)能夠利用網(wǎng)絡(luò)資源快捷方便地獲得信息,并能利用網(wǎng)絡(luò)資源進(jìn)行各種設(shè)備的遠(yuǎn)程監(jiān)控。本文提出的基于嵌入式Linux的遠(yuǎn)程監(jiān)控系統(tǒng)的方案已在小型局域網(wǎng)中得到實(shí)現(xiàn)。該系統(tǒng)在工業(yè)現(xiàn)場(chǎng)、遠(yuǎn)程診斷、信息家電中有著很好的應(yīng)用前景
參考文獻(xiàn):
[1].RS232datasheethttp://www.dzsc.com/datasheet/RS232_585128.html.
[2].RS485datasheethttp://www.dzsc.com/datasheet/RS485_585289.html.
評(píng)論