林劍峰,楊宇鵬
(1. 海軍駐上海電站輔機廠軍代表室,上海 200090;2. 上海船舶運輸科學(xué)研究所 航運技術(shù)與安全國家重點實驗室,上海 200135)
?
監(jiān)控軟件遠(yuǎn)程客戶端的設(shè)計開發(fā)
林劍峰1,楊宇鵬2
(1. 海軍駐上海電站輔機廠軍代表室,上海 200090;2. 上海船舶運輸科學(xué)研究所 航運技術(shù)與安全國家重點實驗室,上海 200135)
為解決監(jiān)控軟件客戶端中代碼重復(fù)、繁雜的問題,以監(jiān)控軟件為研究對象,進(jìn)行簡易型遠(yuǎn)程客戶端的研究工作。該遠(yuǎn)程客戶端系統(tǒng)以監(jiān)控軟件為服務(wù)器對象,通過解決服務(wù)器、客戶機命令解析、內(nèi)存中窗口頁面管理、內(nèi)存拷貝及圖片格式流轉(zhuǎn)換等問題,使客戶端在無需重復(fù)進(jìn)行界面代碼編輯的前提下實時獲取服務(wù)器端數(shù)據(jù)畫面,并具有在不影響服務(wù)器運行的前提下多線程、多客戶同時操縱服務(wù)器的能力。該系統(tǒng)可大大減少客戶端系統(tǒng)的工作量,且采用跨平臺的Qt編程環(huán)境還可使客戶端平臺從Windows擴展到Linux,Android等不同操作系統(tǒng)而無需重新編碼。整套系統(tǒng)具有很強的實用性。
客戶端; 內(nèi)存拷貝; 跨平臺
對于監(jiān)控軟件而言,遠(yuǎn)程客戶端是必不可少的一部分,其通常包括服務(wù)器/客戶端(C/S)和瀏覽器/服務(wù)器(B/S)兩種模式。
1) 服務(wù)器/客戶端(C/S)模式。這是最為普遍的開發(fā)模式。服務(wù)器端構(gòu)建一個網(wǎng)絡(luò)服務(wù)器,客戶端根據(jù)需要再次實現(xiàn)相應(yīng)的界面和流程并連接服務(wù)器,然后制定通信協(xié)議,以實現(xiàn)與服務(wù)器的通信。該模式的優(yōu)點是客戶端是針對服務(wù)端定制的,因此界面開發(fā)相對簡單,網(wǎng)絡(luò)通信也清晰明白;但是,一旦服務(wù)器端有變動,客戶端的代碼就需要作相應(yīng)的改動,會增加重復(fù)開發(fā)的工作量。
2) 瀏覽器/服務(wù)器(B/S)模式??蛻舳耸菫g覽器,而服務(wù)器端則分為處理數(shù)據(jù)的業(yè)務(wù)軟件和負(fù)責(zé)與客戶端通信的網(wǎng)站兩部分。在該模式中,客戶端是通過瀏覽器訪問的,因此服務(wù)器端程序更改時,客戶端程序無需作任何修改,這是該模式最大的優(yōu)點;但是,服務(wù)器端需要構(gòu)建網(wǎng)站及與處理數(shù)據(jù)的業(yè)務(wù)軟件進(jìn)行通信,且每個在服務(wù)器軟件上運行的控件都需要移植到網(wǎng)站開發(fā)中,這會較大地增加開發(fā)的工作量和開發(fā)難度。
以上兩種工作模式各有各的優(yōu)缺點,但是均存在不同程度的重復(fù)編寫或移植界面代碼的問題。監(jiān)控系統(tǒng)中界面復(fù)雜、控件眾多,控件的重復(fù)編碼會增加很多額外的工作量。因此,若能采用一種工作模式使客戶端可跟隨服務(wù)器端變化而不需要重新編碼,則可提高系統(tǒng)開發(fā)的效率。當(dāng)然,針對具體的系統(tǒng)工作環(huán)境也會有一定的前提條件,即服務(wù)器和客戶端均工作在局域網(wǎng)環(huán)境中并沒有極高的網(wǎng)絡(luò)并發(fā)行為。
1.1系統(tǒng)需求及預(yù)期
對于常用的監(jiān)控軟件而言,針對不同的系統(tǒng)項目,除了要進(jìn)行服務(wù)器端項目的編程之外,客戶端程序的開發(fā)工作同樣繁重。若能找到一種通用、簡易的方式,通過編寫一次代碼即可跨項目、跨平臺地實現(xiàn)服務(wù)器端與客戶端界面的同步,將能減少大量的工作量,大大提高項目的進(jìn)度。
遠(yuǎn)程客戶端系統(tǒng)的功能模塊結(jié)構(gòu)及信息命令傳遞圖見圖1,其中,服務(wù)器是監(jiān)控系統(tǒng)中的主要組成部分,除了完成系統(tǒng)的主要監(jiān)控任務(wù)之外,還要對客戶端與服務(wù)器之間的命令交互進(jìn)行解析和發(fā)送數(shù)據(jù)。系統(tǒng)的主要工作流程如下:
(1) 客戶端與服務(wù)器首次連接,發(fā)送連接命令;
(2) 服務(wù)器中的客戶端管理模塊接收命令,通過命令解析器解析出報文,送入客戶端IP信息與請求命令管理器中進(jìn)行命令解析;
(3) 服務(wù)器監(jiān)控頁面內(nèi)存管理模塊會接收該命令并進(jìn)行相關(guān)頁面的內(nèi)存拷貝,同時在內(nèi)存中進(jìn)行數(shù)據(jù)的流格式轉(zhuǎn)換;
(4) 客戶端所需數(shù)據(jù)抓取器將經(jīng)過流格式轉(zhuǎn)換的數(shù)據(jù)從服務(wù)器監(jiān)控頁面內(nèi)存管理模塊中抓取出來,并存儲在客戶端管理模塊的內(nèi)存中;
(5) 客戶端定時將客戶端的IP信息和客戶端所需數(shù)據(jù)組合成客戶端的請求數(shù)據(jù),發(fā)送至服務(wù)器;
(6) 客戶端接收數(shù)據(jù),并全屏顯示得到的數(shù)據(jù);
圖1 遠(yuǎn)程客戶端系統(tǒng)的功能模塊結(jié)構(gòu)及信息命令傳遞圖
(7) 客戶端若有鼠標(biāo)點擊命令發(fā)送,則跳轉(zhuǎn)到流程“(2)”,重新開始工作流程的循環(huán)。
2.1服務(wù)器功能模塊
2.1.1客戶端網(wǎng)絡(luò)命令解析器
客戶端網(wǎng)絡(luò)命令解析器作為服務(wù)器與客戶端的網(wǎng)絡(luò)通信模塊,主要承擔(dān)以下功能:
(1) 當(dāng)不同的客戶端發(fā)送來連接請求時,解析出客戶端的IP地址請求命令及請求的監(jiān)控畫面等信息,并將這些信息送至信息與命令管理器模塊;
(2) 當(dāng)客戶端傳來畫面請求命令時,記錄該IP地址和請求命令,并將其送至信息與命令管理器模塊;
(3) 將服務(wù)器要傳送給客戶端的數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送出去。
2.1.2客戶端IP信息與請求命令管理器
客戶端IP信息與請求命令管理器管理著以下信息:
(1) 客戶端IP,即身份信息;
(2) 客戶端命令,即下次命令處理時的命令信息;
(3) 客戶端請求的畫面信息,即下次發(fā)送給客戶端的內(nèi)存畫面ID。
客戶端IP信息與請求命令會被服務(wù)器監(jiān)控頁面內(nèi)存管理功能模塊和客戶端數(shù)據(jù)定時發(fā)送器抓取。
2.1.3服務(wù)器監(jiān)控頁面內(nèi)存管理功能模塊
服務(wù)器監(jiān)控頁面內(nèi)存管理功能模塊是系統(tǒng)中產(chǎn)生客戶端所需數(shù)據(jù)的模塊。共分為初始化狀態(tài)下產(chǎn)生的數(shù)據(jù)信息和客戶端命令狀態(tài)下產(chǎn)生的數(shù)據(jù)信息2種情況。
(1) 初始化狀態(tài)下數(shù)據(jù)信息的產(chǎn)生流程見圖2,分為以下幾個步驟:
① 判斷此次請求是否是該客戶端的第一次請求;
② 若該請求是客戶端的第一次請求,則開辟新的內(nèi)存區(qū)域,將默認(rèn)的菜單欄窗口和主要顯示欄窗口初始化,并將這2個窗口的窗口地址寫入該客戶端的空白數(shù)據(jù)結(jié)構(gòu)當(dāng)中,由于系統(tǒng)一開始便會創(chuàng)建4個空白的客戶端數(shù)據(jù)管理結(jié)構(gòu),因此只有在有客戶請求之后對應(yīng)的客戶端數(shù)據(jù)管理結(jié)構(gòu)才會實例化,雖然客戶端所請求的窗口在內(nèi)存中會實例化,但不會在服務(wù)器的顯示界面上顯示,而是永遠(yuǎn)處于內(nèi)存運行狀態(tài);
③ 通過該客戶端數(shù)據(jù)管理結(jié)構(gòu)取得該客戶端請求的窗口頁面指針,通過內(nèi)存拷屏技術(shù)將內(nèi)存中的頁面拷貝下來,組成一幅bmp格式的圖片數(shù)據(jù)存儲在客戶端數(shù)據(jù)管理結(jié)構(gòu)中;
④ 利用GDI控件將bmp格式的圖片數(shù)據(jù)壓縮為jpg格式的圖片數(shù)據(jù);
⑤ 客戶 端所需數(shù)據(jù)抓取器定時從客戶端數(shù)據(jù)管理結(jié)構(gòu)中獲取jpg格式的圖片數(shù)據(jù),并通過網(wǎng)絡(luò)命令解析器發(fā)送給客戶端。
圖2 初始化狀態(tài)下數(shù)據(jù)信息的產(chǎn)生流程圖
(2) 客戶端命令狀態(tài)下數(shù)據(jù)信息的產(chǎn)生流程見圖3,分為以下幾個步驟:
① 判斷此次請求是否是該客戶端的第一次請求;
② 若該請求不是客戶端第一次請求,則解析客戶端命令,獲取客戶端身份信息和命令信息;
③ 獲取身份信息之后,從客戶端數(shù)據(jù)管理結(jié)構(gòu)中提取出相應(yīng)客戶端的信息,同時取出相對應(yīng)的菜單欄頁面,主顯示頁面的內(nèi)存頁面地址,并將命令信息輸入這2個頁面的內(nèi)存地址中;
④ 內(nèi)存頁面中處理輸入命令,如界面之間的切換、新建、刪除及界面的鼠標(biāo)點擊操作等;
⑤ 通過該客戶端數(shù)據(jù)管理結(jié)構(gòu)取得該客戶端請求的窗口頁面指針,通過內(nèi)存拷屏技術(shù)將內(nèi)存中的頁面拷貝下來組成bmp格式的圖片數(shù)據(jù),并將其存儲在客戶端數(shù)據(jù)管理結(jié)構(gòu)中;
⑥ 利用GDI控件將bmp格式的圖片數(shù)據(jù)壓縮為jpg格式的圖片數(shù)據(jù);
⑦ 客戶端所需數(shù)據(jù)抓取器定時從客戶端數(shù)據(jù)管理結(jié)構(gòu)中獲取jpg格式的圖片數(shù)據(jù),并通過網(wǎng)絡(luò)命令解析器將其發(fā)送給客戶端。
圖3 客戶端命令狀態(tài)下數(shù)據(jù)信息的產(chǎn)生流程圖
2.1.4客戶端所需數(shù)據(jù)抓取器與客戶端數(shù)據(jù)定時發(fā)送器
客戶端所需數(shù)據(jù)抓取器會從內(nèi)存頁面中將畫面數(shù)據(jù)抓出,而客戶端數(shù)據(jù)定時發(fā)送器則根據(jù)客戶端的刷新頻率將畫面數(shù)據(jù)發(fā)送給客戶端。
2.2客戶端功能模塊
客戶端功能模塊主要有請求、命令發(fā)送以及數(shù)據(jù)顯示等3個功能。
2.2.1客戶端連接命令發(fā)送
客戶端與服務(wù)器首次連接時,將自身的IP信息和首次連接標(biāo)志發(fā)送給服務(wù)器端。
2.2.2客戶端鼠標(biāo)點擊命令發(fā)送
客戶端與服務(wù)器連接之后,客戶端即可向服務(wù)器遠(yuǎn)程發(fā)送操作命令,以獲得自身想要的數(shù)據(jù)。命令包括畫面的切換和畫面中可操作元素的操作,如鼠標(biāo)點擊等命令。
2.2.3客戶端接收數(shù)據(jù),全屏適應(yīng)顯示
客戶端從服務(wù)器中獲得的數(shù)據(jù),其實是一張該客戶端想要獲取的頁面的jpg格式的截圖。將該圖片數(shù)
據(jù)在客戶端中全屏顯示,就可以看到從服務(wù)器端傳回的數(shù)據(jù)了。
隨著手持移動設(shè)備不斷發(fā)展,客戶端除了可在固定的機器上查看服務(wù)器狀態(tài)之外,支持手持移動設(shè)備也是未來的趨勢之一。
客戶端程序想要支持更多的設(shè)備平臺,采用Qt來編寫程序是一種簡單、可靠的方法。Qt是一個跨平臺的C++圖形用戶界面應(yīng)用程序框架,最大的特點是一次編寫、隨處編譯。也就是說,程序的編碼只需要編寫一次,想要移植不同的系統(tǒng)平臺只需要安裝該系統(tǒng)的開發(fā)支持包并重新編譯生成文件即可運行。
綜上所述,監(jiān)控軟件跨平臺遠(yuǎn)程客戶端在不需要二次編寫服務(wù)器端顯示界面控件程序的前提下,可多客戶間互不影響地同時訪問服務(wù)器,訪問機制靈活、簡單、可靠;同時若是采用Qt編寫程序,還可支持多種系統(tǒng)間的移植??梢哉f,采用這種機制的客戶端僅需一次編寫且可通用于不同的項目,對于實際生產(chǎn)工作有很大的作用。
[1]侯馨光.上海船舶運輸科學(xué)研究所機艙自動化技術(shù)的新進(jìn)展[J].上海船舶運輸科學(xué)研究所學(xué)報,2012,35(2):4-15.
[2]L.Jean J.MicroC/OS-II the Real-Time Kernel[M]. 北京:北京航天航空大學(xué)出版社,2003.
Design of the Remote Client in Monitoring Software
LIN Jianfeng1,YANG Yupeng2
(1.NavalPowerStationAuxiliaryEquipmentPlantMilitaryRepresentativeOfficeinShanghai,200090,China;2.StateKeyLaboratoryofNavigationandSafetyTechnology,ShanghaiShip&ShippingResearchInstitute,Shanghai200135,China)
An operationally simplified monitoring software client is developed for eliminating wasteful duplication of coding effort. The server is improved to implement the client command parsing, windows memory page management for windows, memory duplication, and picture format stream conversion so that the client can retrieve and display data from the server without coding. Moreover, multiple clients is allowed to access the server at the same time without interfering the operation of the servers, thanks to the multiple thread programming. This system greatly reduces the workload of the client system. With the Qt cross-platform programming environment, the client can work on the platforms other than Windows, such as Linux or Android as well without recoding.
client; memory copy; cross-platform
2015-10-28
林劍峰(1965—),男,浙江寧波人,高級工程師,主要從事機電及核電工作。
1674-5949(2016)01-040-04
TP277.2;TP311.52
A