林劍峰,楊宇鵬
(1. 海軍駐上海電站輔機廠軍代表室,上海 200090;2. 上海船舶運輸科學研究所 航運技術與安全國家重點實驗室,上海 200135)
?
監控軟件遠程客戶端的設計開發
林劍峰1,楊宇鵬2
(1. 海軍駐上海電站輔機廠軍代表室,上海 200090;2. 上海船舶運輸科學研究所 航運技術與安全國家重點實驗室,上海 200135)
為解決監控軟件客戶端中代碼重復、繁雜的問題,以監控軟件為研究對象,進行簡易型遠程客戶端的研究工作。該遠程客戶端系統以監控軟件為服務器對象,通過解決服務器、客戶機命令解析、內存中窗口頁面管理、內存拷貝及圖片格式流轉換等問題,使客戶端在無需重復進行界面代碼編輯的前提下實時獲取服務器端數據畫面,并具有在不影響服務器運行的前提下多線程、多客戶同時操縱服務器的能力。該系統可大大減少客戶端系統的工作量,且采用跨平臺的Qt編程環境還可使客戶端平臺從Windows擴展到Linux,Android等不同操作系統而無需重新編碼。整套系統具有很強的實用性。
客戶端; 內存拷貝; 跨平臺
對于監控軟件而言,遠程客戶端是必不可少的一部分,其通常包括服務器/客戶端(C/S)和瀏覽器/服務器(B/S)兩種模式。
1) 服務器/客戶端(C/S)模式。這是最為普遍的開發模式。服務器端構建一個網絡服務器,客戶端根據需要再次實現相應的界面和流程并連接服務器,然后制定通信協議,以實現與服務器的通信。該模式的優點是客戶端是針對服務端定制的,因此界面開發相對簡單,網絡通信也清晰明白;但是,一旦服務器端有變動,客戶端的代碼就需要作相應的改動,會增加重復開發的工作量。
2) 瀏覽器/服務器(B/S)模式。客戶端是瀏覽器,而服務器端則分為處理數據的業務軟件和負責與客戶端通信的網站兩部分。在該模式中,客戶端是通過瀏覽器訪問的,因此服務器端程序更改時,客戶端程序無需作任何修改,這是該模式最大的優點;但是,服務器端需要構建網站及與處理數據的業務軟件進行通信,且每個在服務器軟件上運行的控件都需要移植到網站開發中,這會較大地增加開發的工作量和開發難度。
以上兩種工作模式各有各的優缺點,但是均存在不同程度的重復編寫或移植界面代碼的問題。監控系統中界面復雜、控件眾多,控件的重復編碼會增加很多額外的工作量。因此,若能采用一種工作模式使客戶端可跟隨服務器端變化而不需要重新編碼,則可提高系統開發的效率。當然,針對具體的系統工作環境也會有一定的前提條件,即服務器和客戶端均工作在局域網環境中并沒有極高的網絡并發行為。
1.1系統需求及預期
對于常用的監控軟件而言,針對不同的系統項目,除了要進行服務器端項目的編程之外,客戶端程序的開發工作同樣繁重。若能找到一種通用、簡易的方式,通過編寫一次代碼即可跨項目、跨平臺地實現服務器端與客戶端界面的同步,將能減少大量的工作量,大大提高項目的進度。
遠程客戶端系統的功能模塊結構及信息命令傳遞圖見圖1,其中,服務器是監控系統中的主要組成部分,除了完成系統的主要監控任務之外,還要對客戶端與服務器之間的命令交互進行解析和發送數據。系統的主要工作流程如下:
(1) 客戶端與服務器首次連接,發送連接命令;
(2) 服務器中的客戶端管理模塊接收命令,通過命令解析器解析出報文,送入客戶端IP信息與請求命令管理器中進行命令解析;
(3) 服務器監控頁面內存管理模塊會接收該命令并進行相關頁面的內存拷貝,同時在內存中進行數據的流格式轉換;
(4) 客戶端所需數據抓取器將經過流格式轉換的數據從服務器監控頁面內存管理模塊中抓取出來,并存儲在客戶端管理模塊的內存中;
(5) 客戶端定時將客戶端的IP信息和客戶端所需數據組合成客戶端的請求數據,發送至服務器;
(6) 客戶端接收數據,并全屏顯示得到的數據;

圖1 遠程客戶端系統的功能模塊結構及信息命令傳遞圖
(7) 客戶端若有鼠標點擊命令發送,則跳轉到流程“(2)”,重新開始工作流程的循環。
2.1服務器功能模塊
2.1.1客戶端網絡命令解析器
客戶端網絡命令解析器作為服務器與客戶端的網絡通信模塊,主要承擔以下功能:
(1) 當不同的客戶端發送來連接請求時,解析出客戶端的IP地址請求命令及請求的監控畫面等信息,并將這些信息送至信息與命令管理器模塊;
(2) 當客戶端傳來畫面請求命令時,記錄該IP地址和請求命令,并將其送至信息與命令管理器模塊;
(3) 將服務器要傳送給客戶端的數據通過網絡發送出去。
2.1.2客戶端IP信息與請求命令管理器
客戶端IP信息與請求命令管理器管理著以下信息:
(1) 客戶端IP,即身份信息;
(2) 客戶端命令,即下次命令處理時的命令信息;
(3) 客戶端請求的畫面信息,即下次發送給客戶端的內存畫面ID。
客戶端IP信息與請求命令會被服務器監控頁面內存管理功能模塊和客戶端數據定時發送器抓取。
2.1.3服務器監控頁面內存管理功能模塊
服務器監控頁面內存管理功能模塊是系統中產生客戶端所需數據的模塊。共分為初始化狀態下產生的數據信息和客戶端命令狀態下產生的數據信息2種情況。
(1) 初始化狀態下數據信息的產生流程見圖2,分為以下幾個步驟:
① 判斷此次請求是否是該客戶端的第一次請求;
② 若該請求是客戶端的第一次請求,則開辟新的內存區域,將默認的菜單欄窗口和主要顯示欄窗口初始化,并將這2個窗口的窗口地址寫入該客戶端的空白數據結構當中,由于系統一開始便會創建4個空白的客戶端數據管理結構,因此只有在有客戶請求之后對應的客戶端數據管理結構才會實例化,雖然客戶端所請求的窗口在內存中會實例化,但不會在服務器的顯示界面上顯示,而是永遠處于內存運行狀態;
③ 通過該客戶端數據管理結構取得該客戶端請求的窗口頁面指針,通過內存拷屏技術將內存中的頁面拷貝下來,組成一幅bmp格式的圖片數據存儲在客戶端數據管理結構中;
④ 利用GDI控件將bmp格式的圖片數據壓縮為jpg格式的圖片數據;
⑤ 客戶 端所需數據抓取器定時從客戶端數據管理結構中獲取jpg格式的圖片數據,并通過網絡命令解析器發送給客戶端。

圖2 初始化狀態下數據信息的產生流程圖
(2) 客戶端命令狀態下數據信息的產生流程見圖3,分為以下幾個步驟:
① 判斷此次請求是否是該客戶端的第一次請求;
② 若該請求不是客戶端第一次請求,則解析客戶端命令,獲取客戶端身份信息和命令信息;
③ 獲取身份信息之后,從客戶端數據管理結構中提取出相應客戶端的信息,同時取出相對應的菜單欄頁面,主顯示頁面的內存頁面地址,并將命令信息輸入這2個頁面的內存地址中;
④ 內存頁面中處理輸入命令,如界面之間的切換、新建、刪除及界面的鼠標點擊操作等;
⑤ 通過該客戶端數據管理結構取得該客戶端請求的窗口頁面指針,通過內存拷屏技術將內存中的頁面拷貝下來組成bmp格式的圖片數據,并將其存儲在客戶端數據管理結構中;
⑥ 利用GDI控件將bmp格式的圖片數據壓縮為jpg格式的圖片數據;
⑦ 客戶端所需數據抓取器定時從客戶端數據管理結構中獲取jpg格式的圖片數據,并通過網絡命令解析器將其發送給客戶端。

圖3 客戶端命令狀態下數據信息的產生流程圖
2.1.4客戶端所需數據抓取器與客戶端數據定時發送器
客戶端所需數據抓取器會從內存頁面中將畫面數據抓出,而客戶端數據定時發送器則根據客戶端的刷新頻率將畫面數據發送給客戶端。
2.2客戶端功能模塊
客戶端功能模塊主要有請求、命令發送以及數據顯示等3個功能。
2.2.1客戶端連接命令發送
客戶端與服務器首次連接時,將自身的IP信息和首次連接標志發送給服務器端。
2.2.2客戶端鼠標點擊命令發送
客戶端與服務器連接之后,客戶端即可向服務器遠程發送操作命令,以獲得自身想要的數據。命令包括畫面的切換和畫面中可操作元素的操作,如鼠標點擊等命令。
2.2.3客戶端接收數據,全屏適應顯示
客戶端從服務器中獲得的數據,其實是一張該客戶端想要獲取的頁面的jpg格式的截圖。將該圖片數
據在客戶端中全屏顯示,就可以看到從服務器端傳回的數據了。
隨著手持移動設備不斷發展,客戶端除了可在固定的機器上查看服務器狀態之外,支持手持移動設備也是未來的趨勢之一。
客戶端程序想要支持更多的設備平臺,采用Qt來編寫程序是一種簡單、可靠的方法。Qt是一個跨平臺的C++圖形用戶界面應用程序框架,最大的特點是一次編寫、隨處編譯。也就是說,程序的編碼只需要編寫一次,想要移植不同的系統平臺只需要安裝該系統的開發支持包并重新編譯生成文件即可運行。
綜上所述,監控軟件跨平臺遠程客戶端在不需要二次編寫服務器端顯示界面控件程序的前提下,可多客戶間互不影響地同時訪問服務器,訪問機制靈活、簡單、可靠;同時若是采用Qt編寫程序,還可支持多種系統間的移植。可以說,采用這種機制的客戶端僅需一次編寫且可通用于不同的項目,對于實際生產工作有很大的作用。
[1]侯馨光.上海船舶運輸科學研究所機艙自動化技術的新進展[J].上海船舶運輸科學研究所學報,2012,35(2):4-15.
[2]L.Jean J.MicroC/OS-II the Real-Time Kernel[M]. 北京:北京航天航空大學出版社,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