基于云協(xié)作平臺(tái)的客戶端設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  題目:基于云協(xié)作平臺(tái)的客戶端設(shè)計(jì)與實(shí)現(xiàn)</p><p>  基于云協(xié)作平臺(tái)的客戶端設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  摘要</b></p><p>  云協(xié)作平臺(tái)其理論依據(jù)來(lái)源于云計(jì)算,是基于互聯(lián)網(wǎng),將共享的軟硬件資源和信息,通過(guò)云資源調(diào)度管理系統(tǒng)(JH scheduler),按需提供給計(jì)算機(jī)和其他設(shè)備,并對(duì)這些設(shè)備進(jìn)

2、行管理。云協(xié)作平臺(tái)通常提供通用的通過(guò)瀏覽器訪問(wèn)的應(yīng)用,軟件和數(shù)據(jù)可存儲(chǔ)在數(shù)據(jù)中心。瀏覽器和服務(wù)器結(jié)構(gòu)雖然簡(jiǎn)化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級(jí)的成本和工作量,降低了用戶的總體成本,然而瀏覽器和服務(wù)器結(jié)構(gòu)也有一些自身無(wú)法克服的缺點(diǎn)。現(xiàn)如今,瀏覽器種類繁多,良莠不齊,這樣,就引發(fā)了一個(gè)很難做到平衡的問(wèn)題——瀏覽器的兼容性問(wèn)題,還有一個(gè)根問(wèn)重要的是:如果要將本地的一些應(yīng)用程序集成到云平臺(tái),瀏覽器就顯得捉襟見肘了??蛻舳说某霈F(xiàn)恰恰解決了以上

3、問(wèn)題。</p><p>  本文基于云協(xié)作平臺(tái),以瀏覽器實(shí)現(xiàn)的功能為設(shè)計(jì)參考,重點(diǎn)在于節(jié)省系統(tǒng)軟硬件資源,避免不同瀏覽器帶來(lái)的瀏覽器兼容性問(wèn)題,增強(qiáng)云協(xié)作平臺(tái)前端的可擴(kuò)展性,并為客戶端增加一些與服務(wù)端交互的工具,提高云協(xié)作平臺(tái)的用戶體驗(yàn)和產(chǎn)品的認(rèn)可度??蛻舳说膶?shí)現(xiàn)是以觀察者模式為設(shè)計(jì)模式,以QT GUI為開發(fā)框架,使用Thrift,Boost等第三方工具庫(kù)。做到與瀏覽器端高度一致,與服務(wù)器端接口兼容,又具有客戶端

4、特色的云協(xié)作平臺(tái)的用戶前端軟件。</p><p>  通過(guò)幾個(gè)月的學(xué)習(xí)和努力,熟悉了服務(wù)器端的運(yùn)行機(jī)制,以及服務(wù)器和瀏覽器的交互過(guò)程,在此基礎(chǔ)上參考瀏覽器端實(shí)現(xiàn)的用戶操作界面,實(shí)現(xiàn)了與瀏覽器端功能相同的客戶端。經(jīng)過(guò)測(cè)試,運(yùn)行穩(wěn)定,可以投放使用。</p><p>  關(guān)鍵詞:云協(xié)作平臺(tái);JH scheduler;客戶端;QT GUI</p><p>  Design

5、and Implementation of the Client On Cloud Collaboration Platform</p><p><b>  Abstract</b></p><p>  Cloud collaboration platform the theoretical basis from the cloud computing, Intern

6、et based, will be shared hardware and software resources and information be provided to computers and other equipment, and management of these devices. Cloud collaboration platforms usually provide generic application th

7、rough the browser, software and data can be stored in the data center. The browser and the server mechanism while simplifying the client computer load, reduce the cost and the workload of system ma</p><p>  

8、In this paper, cloud based collaboration platform, the browser functions as a design reference, Through resource scheduling management system (JH scheduler), focused on saving the system software and hardware resources,

9、avoid browser compatibility problems caused by cloud browser, enhanced collaboration platform front-end scalability, and to increase the number of interactive tools for the client and server, improve the recognition of c

10、loud cooperation platform user experience and product the. T</p><p>  Through several months of study and work, familiar with the operation mechanism of the server, and the server and browser interaction pro

11、cess, the user operation interface on the basis of browser implementation, achieved with the same client browser function. After testing, stable operation, can be put in use.</p><p>  Key Words: Cloud collab

12、oration platform ; JH scheduler ;The client;QT GUI</p><p><b>  目錄</b></p><p><b>  摘要I</b></p><p>  AbstractII</p><p><b>  1 緒論1</b&g

13、t;</p><p>  1.1課題設(shè)計(jì)背景1</p><p>  1.2課題設(shè)計(jì)的目的和意義1</p><p>  1.3課題的主要研究工作1</p><p>  1.4 論文結(jié)構(gòu)安排2</p><p>  2 課題設(shè)計(jì)的關(guān)鍵技術(shù)3</p><p>  2.1 資源調(diào)度管理系統(tǒng)簡(jiǎn)介

14、3</p><p>  2.2 觀察者模式簡(jiǎn)介4</p><p>  2.2.1 概述4</p><p>  2.2.2 解決的問(wèn)題4</p><p>  2.2.3 模式中的角色4</p><p>  2.2.4 模式解讀5</p><p>  2.2.5 模式總結(jié)5</p&

15、gt;<p>  2.3 Thrift庫(kù)6</p><p>  2.3.1 Thrift簡(jiǎn)介6</p><p>  2.3.2 Thrift架構(gòu)6</p><p>  2.3.3 支持的數(shù)據(jù)傳輸格式、數(shù)據(jù)傳輸方式和服務(wù)模型7</p><p>  2.3.4 Thrift使用7</p><p> 

16、 2.4 Boost庫(kù)8</p><p>  2.4.1 Boost庫(kù)簡(jiǎn)介8</p><p>  2.4.2 Boost的log庫(kù)8</p><p>  2.5 QT GUI簡(jiǎn)介10</p><p>  2.5.1 QT GUI簡(jiǎn)介和功能特點(diǎn)10</p><p>  2.5.2 信號(hào)和槽10</p&g

17、t;<p>  2.5.3 樣式表11</p><p>  2.5.4 QtWebKit12</p><p>  3 系統(tǒng)需求分析14</p><p>  3.1 用戶需求分析14</p><p>  3.2 性能需求分析15</p><p>  3.3 數(shù)據(jù)需求分析17</p>

18、<p>  4 系統(tǒng)概要設(shè)計(jì)19</p><p>  4.1 軟件體系結(jié)構(gòu)設(shè)計(jì)19</p><p>  4.2 系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)19</p><p>  4.3 系統(tǒng)的功能模塊設(shè)計(jì)20</p><p>  5 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)22</p><p>  5.1 登陸頁(yè)面的設(shè)計(jì)與實(shí)現(xiàn)22</

19、p><p>  5.2 登陸后界面的設(shè)計(jì)與實(shí)現(xiàn)23</p><p>  5.3 功能模塊的設(shè)計(jì)與實(shí)現(xiàn)26</p><p>  5.3.1 文件傳輸26</p><p>  5.3.2 執(zhí)行遠(yuǎn)端命令26</p><p>  5.3.3 查看節(jié)點(diǎn)信息27</p><p>  5.3.4 啟動(dòng)遠(yuǎn)

20、程桌面27</p><p>  5.3.5 管理遠(yuǎn)程桌面27</p><p>  5.3.6 提交作業(yè)27</p><p>  5.3.7 作業(yè)數(shù)據(jù)管理27</p><p><b>  6 系統(tǒng)測(cè)試28</b></p><p>  6.1軟件測(cè)試基礎(chǔ)理論28</p>&l

21、t;p>  6.1.1 軟件測(cè)試定義28</p><p>  6.1.2 軟件測(cè)試基本概念28</p><p>  6.2 軟件測(cè)試目的29</p><p>  6.3 軟件測(cè)試方法分類29</p><p>  6.3.1 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試29</p><p>  6.3.2 黑盒與白盒測(cè)試29&l

22、t;/p><p>  6.3.3 單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試、驗(yàn)證測(cè)試和確認(rèn)測(cè)試30</p><p>  6.4 系統(tǒng)測(cè)試30</p><p>  6.4.1 測(cè)試用例設(shè)計(jì)要求30</p><p>  6.4.2 系統(tǒng)各個(gè)模塊測(cè)試用例31</p><p>  6.5測(cè)試報(bào)告34</p><p

23、><b>  7 總結(jié)35</b></p><p><b>  參考文獻(xiàn)36</b></p><p><b>  致謝37</b></p><p><b>  附錄40</b></p><p><b>  1 緒論</b>

24、;</p><p>  1.1課題設(shè)計(jì)背景</p><p>  2006年8月9日,google首席執(zhí)行官埃里克·施密特(Eric Schmidt)在搜索引擎大會(huì)(SES San Jose 2006)首次提出“云計(jì)算”(Cloud Computing)的概念。之后包括Google 、IBM、雅虎、惠普、英特爾,以及戴爾在內(nèi)的世界頂尖級(jí)IT公司為推動(dòng)

25、和發(fā)展云計(jì)算不遺余力,爭(zhēng)先恐后。云計(jì)算理論逐步成熟和結(jié)構(gòu)趨于完整,基于云計(jì)算的產(chǎn)品應(yīng)運(yùn)而生,云協(xié)作平臺(tái)就是其中的一個(gè)典型。</p><p>  云協(xié)作平臺(tái)其理論依據(jù)來(lái)源于云計(jì)算,自然是基于互聯(lián)網(wǎng),將共享的軟硬件資源和信息,通過(guò)運(yùn)行于服務(wù)器端的資源調(diào)度管理系統(tǒng)(JH scheduler)統(tǒng)一協(xié)調(diào),按需提供給計(jì)算機(jī)和其他設(shè)備,并對(duì)這些設(shè)備進(jìn)行管理。云協(xié)作平臺(tái)通常提供通用的通過(guò)瀏覽器訪問(wèn)的應(yīng)用,軟件和數(shù)據(jù)可存儲(chǔ)在數(shù)據(jù)中

26、心。瀏覽器和服務(wù)器結(jié)構(gòu)雖然簡(jiǎn)化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級(jí)的成本和工作量,降低了用戶的總體成本,然而瀏覽器和服務(wù)器結(jié)構(gòu)也有一些自身無(wú)法克服的缺點(diǎn)?,F(xiàn)如今,瀏覽器種類繁多,良莠不齊,這樣,就引發(fā)了一個(gè)很難做到平衡的問(wèn)題——瀏覽器的兼容性問(wèn)題,還有一個(gè)更為重要的是:如果要將本地的一些應(yīng)用程序集成到云協(xié)作平臺(tái),瀏覽器就顯得捉襟見肘了??蛻舳说某霈F(xiàn)恰恰解決了以上問(wèn)題。</p><p>  1.2課題設(shè)計(jì)的目的和

27、意義</p><p>  瀏覽器能夠?qū)崿F(xiàn)的功能,客戶端同樣也可以實(shí)現(xiàn),但這并不是說(shuō),客戶端就可以完全取代瀏覽器來(lái)實(shí)現(xiàn)與云平臺(tái)的交互,完成生產(chǎn)實(shí)踐。瀏覽器旨在其靈活性,可移動(dòng)性,而客戶端旨在其高度的集成性,以及其普適性,即可以集成操作系統(tǒng)上的所有應(yīng)用,更方便的為用戶提供服務(wù);普適性在于操作系統(tǒng)的較為明確,程序開發(fā)有的放矢,這樣也大大降低了開發(fā)成本,和開發(fā)、維護(hù)周期??蛻舳?服務(wù)器結(jié)構(gòu)能充分發(fā)揮客戶端PC的處理能力,

28、很多工作可以在客戶端處理后再提交給服務(wù)器,這樣可以提高工作效率,縮短工作時(shí)間,使云平臺(tái)能夠更高效、快捷的工作??蛻舳?服務(wù)器結(jié)構(gòu)在數(shù)據(jù)安全性方面也明顯高于瀏覽器/服務(wù)器結(jié)構(gòu),可以較為容易地實(shí)現(xiàn)多層認(rèn)證。</p><p>  1.3課題的主要研究工作</p><p>  由于云協(xié)作平臺(tái)的瀏覽器版已經(jīng)實(shí)現(xiàn),而客戶端版是盡量和瀏覽器版保持一致,因此,熟悉服務(wù)器端運(yùn)行機(jī)制和瀏覽器版的基本結(jié)構(gòu)使得開

29、發(fā)客戶端變得有的放矢,也就相對(duì)容易的多了。服務(wù)器端的為java web實(shí)現(xiàn),客戶端實(shí)現(xiàn)是用C++實(shí)現(xiàn),兩者之間需要一個(gè)可以相互調(diào)用的接口。除此之外,從服務(wù)器端拿到的數(shù)據(jù)列表需要顯示在客戶端的對(duì)話框頁(yè)面,而這些數(shù)據(jù)列表是在瀏覽器端已經(jīng)</p><p>  實(shí)現(xiàn)的,在對(duì)話框上能夠直接顯示web頁(yè)面,就使得開發(fā)工作量減輕許多,這樣也為客戶端節(jié)省了響應(yīng)時(shí)間。</p><p>  1.4 論文結(jié)構(gòu)安

30、排</p><p>  本論文共有四章,具體組織如下:</p><p>  第一章:通過(guò)對(duì)已經(jīng)實(shí)現(xiàn)的云協(xié)作平臺(tái)的Web端功能分析,提出客戶端開發(fā)的目的和意義,此次研究的主要任務(wù),以及本次論文的組織結(jié)構(gòu)。</p><p>  第二章:主要介紹資源調(diào)度管理系統(tǒng)(JH scheduler)和開發(fā)本系統(tǒng)所采用的相關(guān)技術(shù),包括設(shè)計(jì)模式中的觀察者模式,Thrift庫(kù)、Boost

31、庫(kù)以及QT GUI編程等。</p><p>  第三章:系統(tǒng)需求分析,其中包括用戶需求分析、性能需求分析、數(shù)據(jù)需求分析。</p><p>  第四章:系統(tǒng)概要設(shè)計(jì),從軟件體系結(jié)構(gòu),數(shù)據(jù)庫(kù)設(shè)計(jì),系統(tǒng)功能模塊設(shè)計(jì)等方面敘述。</p><p>  第五章:系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn),用戶登錄頁(yè)面,操作界面,以及各個(gè)功能模塊的實(shí)現(xiàn)。</p><p><

32、b>  第六章:系統(tǒng)測(cè)試</b></p><p><b>  第七章:總結(jié)</b></p><p>  2 課題設(shè)計(jì)的關(guān)鍵技術(shù)</p><p>  云協(xié)作平臺(tái)是通過(guò)資源調(diào)度管理系統(tǒng),統(tǒng)一對(duì)用戶作業(yè)需求進(jìn)行動(dòng)態(tài)管理、分配資源的協(xié)作的系統(tǒng)。一般是基于互聯(lián)網(wǎng),也有用專業(yè)網(wǎng)的情況。云協(xié)作平臺(tái)的主要功能是:分工合作、資源控制、作業(yè)管理等

33、功能。</p><p>  2.1 資源調(diào)度管理系統(tǒng)簡(jiǎn)介</p><p>  資源調(diào)度管理系統(tǒng)(以下稱JH Scheduler)是一個(gè)集資源監(jiān)控和分布式應(yīng)用調(diào)度為一體的云計(jì)算的基礎(chǔ)架構(gòu)管理中間件,利用JH Scheduler可以快速的建立起一個(gè)完整企業(yè)級(jí)應(yīng)用服務(wù)平臺(tái)。它可以監(jiān)控、調(diào)度、管理網(wǎng)絡(luò)上的10臺(tái)到上千臺(tái)不同操作系統(tǒng)的服務(wù)器、工作站和虛擬機(jī),把它們作為云計(jì)算資源集中管理起來(lái)為多種類型

34、的應(yīng)用軟件提供統(tǒng)一服務(wù)平臺(tái)。 JH Scheduler具有完備的和可擴(kuò)展的資源定義、監(jiān)控等功能,包括硬件資源、操作系統(tǒng)、軟件許可證資源、存儲(chǔ)資源等等,并且為應(yīng)用軟件提供多種接口來(lái)使用這些云計(jì)算資源,從而輕易實(shí)現(xiàn)應(yīng)用軟件的并行分布式運(yùn)行和彈性計(jì)算,完成從傳統(tǒng)的以服務(wù)器為中心的計(jì)算模式向以應(yīng)用服務(wù)為中心的計(jì)算模式遷移。 JH Scheduler支持多種類型應(yīng)用軟件的通用中間件,包括CAD/CAE軟件、制造業(yè)設(shè)計(jì)軟件、石油勘探分析軟件、模擬仿

35、真軟件、科學(xué)計(jì)算軟件等,這些不同類型的應(yīng)用軟件可以同時(shí)使用JH Scheduler管理的應(yīng)用集群,從而實(shí)現(xiàn)計(jì)算資源的充分共享。 由JH Scheduler管理的應(yīng)用集群系統(tǒng)具有高可用性,用戶可以配置多個(gè)管理節(jié)點(diǎn),即使只有一個(gè)JH Schedule</p><p>  為了使計(jì)算資源得到高效使用,JH Scheduler內(nèi)置多種高效的管理調(diào)度策略,包括先來(lái)先服務(wù)、用戶/用戶組資源配額管理、基于隊(duì)列的優(yōu)先級(jí)設(shè)置、資源

36、公平共享調(diào)度、獨(dú)占式作業(yè)調(diào)度、搶占式作業(yè)調(diào)度等,基于這些策略,JH Scheduler把應(yīng)用軟件的每一次執(zhí)行實(shí)例作為一個(gè)作業(yè)來(lái)進(jìn)行調(diào)度和管理,并為管理員和作業(yè)的用戶提供方便的作業(yè)狀態(tài)監(jiān)控和友好的用戶界面。此外,JH Scheduler還有可擴(kuò)展的接口,可以為特殊的管理調(diào)度需求定制策略。 由JH Scheduler管理的應(yīng)用集群系統(tǒng)具有高可靠性,作業(yè)在沒有資源的情況下將在系統(tǒng)中排隊(duì)等待資源。即使在執(zhí)行過(guò)程中計(jì)算節(jié)點(diǎn)出現(xiàn)故障,JH Sche

37、duler仍然可以把作業(yè)重新調(diào)度到其它機(jī)器上繼續(xù)執(zhí)行。 </p><p>  作為云計(jì)算基礎(chǔ)架構(gòu)產(chǎn)品,JH Scheduler與其基礎(chǔ)之上的Web portal產(chǎn)品提供安全友好的用戶管理和使用界面;通過(guò)與JH License Manager集成管理應(yīng)用集</p><p>  群系統(tǒng)的許可證資源,并提供專門針對(duì)許可證資源的先進(jìn)調(diào)度;通過(guò)與JH Analytics集成為用戶提供豐富的資源使用和

38、作業(yè)調(diào)度報(bào)表功能,以及詳盡靈活的計(jì)費(fèi)系統(tǒng)。 </p><p>  JH Scheduler產(chǎn)品的總體結(jié)構(gòu)如圖2.1所示。</p><p>  圖2.1 JH scheduler 總體結(jié)構(gòu)圖</p><p>  2.2 觀察者模式簡(jiǎn)介</p><p><b>  2.2.1 概述</b></p><p&

39、gt;  觀察者模式有時(shí)被稱作發(fā)布/訂閱模式,觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,使它們能夠自動(dòng)更新自己。</p><p>  2.2.2 解決的問(wèn)題</p><p>  將一個(gè)系統(tǒng)分割成一個(gè)一些類相互協(xié)作的類有一個(gè)不好的副作用,那就是需要維護(hù)相關(guān)對(duì)象間的一致性。我們不希望為了維持一致性而使各類緊

40、密耦合,這樣會(huì)給維護(hù)、擴(kuò)展和重用都帶來(lái)不便。觀察者就是解決這類的耦合關(guān)系的。</p><p>  2.2.3 模式中的角色</p><p>  抽象主題(Subject):它把所有觀察者對(duì)象的引用保存到一個(gè)聚集里,每個(gè)主題都可以有任何數(shù)量的觀察者。抽象主題提供一個(gè)接口,可以增加和刪除觀察者對(duì)象。</p><p>  具體主題(ConcreteSubject):將有關(guān)

41、狀態(tài)存入具體觀察者對(duì)象;在具體主題內(nèi)部狀態(tài)改變時(shí),給所有登記過(guò)的觀察者發(fā)出通知。</p><p>  抽象觀察者(Observer):為所有的具體觀察者定義一個(gè)接口,在得到主題通知時(shí)更新自己。</p><p>  具體觀察者(ConcreteObserver):實(shí)現(xiàn)抽象觀察者角色所要求的更新接口,以便使本身的狀態(tài)與主題狀態(tài)協(xié)調(diào)。</p><p>  2.2.4 模式

42、解讀</p><p>  實(shí)現(xiàn)觀察者模式有很多形式,比較直觀的一種是使用一種“注冊(cè)——通知——撤銷注冊(cè)”的形式。如圖2.2詳細(xì)的描述了這樣一種過(guò)程:</p><p>  圖2.2觀察者模式實(shí)現(xiàn)過(guò)程</p><p><b>  觀察者</b></p><p> ?。∣bserver)將自己注冊(cè)到被觀察對(duì)象(Subject)

43、中,被觀察對(duì)象將觀察者存放在一個(gè)容器(Container)里。</p><p><b>  被觀察</b></p><p>  被觀察對(duì)象發(fā)生了某種變化(如圖中的SomeChange),從容器中得到所有注冊(cè)過(guò)的觀察者,將變化通知觀察者。</p><p><b>  撤銷觀察</b></p><p>

44、;  觀察者告訴被觀察者要撤銷觀察,被觀察者從容器中將觀察者去除。</p><p>  觀察者將自己注冊(cè)到被觀察者的容器中時(shí),被觀察者不應(yīng)該過(guò)問(wèn)觀察者的具體類型,而是應(yīng)該使用觀察者的接口。這樣的優(yōu) 點(diǎn)是:假定程序中還有別的觀察者,那么只要這個(gè)觀察者也是相同的接口實(shí)現(xiàn)即可。一個(gè)被觀察者可以對(duì)應(yīng)多個(gè)觀察者,當(dāng)被觀察者發(fā)生變化的時(shí)候,他可以將消息 一一通知給所有的觀察者。基于接口,而不是具體的實(shí)現(xiàn)——這一點(diǎn)為程序提供了

45、更大的靈活性。</p><p>  2.2.5 模式總結(jié)</p><p><b>  優(yōu)點(diǎn)</b></p><p>  觀察者模式解除了主題和具體觀察者的耦合,讓耦合的雙方都依賴于抽象,而不是依賴具體。從而使得各自的變化都不會(huì)影響另一邊的變化。</p><p><b>  缺點(diǎn)</b></p&

46、gt;<p>  依賴關(guān)系并未完全解除,抽象通知者依舊依賴抽象的觀察者。</p><p><b>  適用場(chǎng)景</b></p><p>  當(dāng)一個(gè)對(duì)象的改變需要給變其它對(duì)象時(shí),而且它不知道具體有多少個(gè)對(duì)象有待改變時(shí)。</p><p>  一個(gè)抽象某型有兩個(gè)方面,當(dāng)其中一個(gè)方面依賴于另一個(gè)方面,這時(shí)用觀察者模式可以將這兩者封裝在獨(dú)立

47、的對(duì)象中使它們各自獨(dú)立地改變和復(fù)用。</p><p>  2.3 Thrift庫(kù)</p><p>  2.3.1 Thrift簡(jiǎn)介</p><p>  Thrift是一個(gè)跨語(yǔ)言的服務(wù)部署框架,最初由Facebook于2007年開發(fā),2008年進(jìn)入Apache開源項(xiàng)目。Thrift通過(guò)一個(gè)中 間語(yǔ)言(IDL, 接口定義語(yǔ)言)來(lái)定義RPC的接口和數(shù)據(jù)類型,然后通過(guò)一個(gè)編

48、譯器生成不同語(yǔ)言的代碼(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代碼負(fù)責(zé)RPC協(xié)議層和傳輸層的實(shí)現(xiàn)。</p><p>  2.3.2 Thrift架構(gòu)</p><p>  圖2.3 Thrift架構(gòu)</p><p>  Thrif

49、t實(shí)際上是實(shí)現(xiàn)了C/S模式,通過(guò)代碼生成工具將接口定義文件生成服務(wù)器端和客戶端代碼(可以為不同語(yǔ)言),從而實(shí)現(xiàn)服務(wù)端和客戶端跨語(yǔ) 言的支持。用戶在Thrift描述文件中聲明自己的服務(wù),這些服務(wù)經(jīng)過(guò)編譯后會(huì)生成相應(yīng)語(yǔ)言的代碼文件,然后用戶實(shí)現(xiàn)服務(wù)(客戶端調(diào)用服務(wù),服務(wù)器端提服務(wù))便可以了。其中protocol(協(xié)議層, 定義數(shù)據(jù)傳輸格式,可以為二進(jìn)制或者XML等)和transport(傳輸層,定義數(shù)據(jù)傳輸方式,可以為TCP/IP傳輸,內(nèi)存

50、共享或者文件共享等)被用作運(yùn)行時(shí)庫(kù)。</p><p>  2.3.3 支持的數(shù)據(jù)傳輸格式、數(shù)據(jù)傳輸方式和服務(wù)模型</p><p> ?。?)支持的傳輸格式</p><p>  TBinaryProtocol – 二進(jìn)制格式.</p><p>  TCompactProtocol – 壓縮格式</p><p>  TJS

51、ONProtocol – JSON格式</p><p>  TSimpleJSONProtocol –提供JSON只寫協(xié)議, 生成的文件很容易通過(guò)腳本語(yǔ)言解析。</p><p>  TDebugProtocol – 使用易懂的可讀的文本格式,以便于debug</p><p>  (2)支持的數(shù)據(jù)傳輸方式</p><p>  TSocket -

52、阻塞式socker</p><p>  TFramedTransport – 以frame為單位進(jìn)行傳輸,非阻塞式服務(wù)中使用。</p><p>  TFileTransport – 以文件形式進(jìn)行傳輸。</p><p>  TMemoryTransport – 將內(nèi)存用于I/O. java實(shí)現(xiàn)時(shí)內(nèi)部實(shí)際使用了簡(jiǎn)單的ByteArrayOutputStream。<

53、/p><p>  TZlibTransport – 使用zlib進(jìn)行壓縮, 與其他傳輸方式聯(lián)合使用。當(dāng)前無(wú)java實(shí)現(xiàn)。</p><p>  (3)支持的服務(wù)模型</p><p>  TSimpleServer – 簡(jiǎn)單的單線程服務(wù)模型,常用于測(cè)試</p><p>  TThreadPoolServer – 多線程服務(wù)模型,使用標(biāo)準(zhǔn)的阻塞式IO。

54、</p><p>  TNonblockingServer – 多線程服務(wù)模型,使用非阻塞式IO(需使用TFramedTransport數(shù)據(jù)傳輸方式)</p><p>  2.3.4 Thrift使用</p><p> ?。?)編譯安裝:./configure –》make –》make install</p><p> ?。?)利用Thri

55、ft部署服務(wù)</p><p>  主要流程:編寫服務(wù)說(shuō)明,保存到.thrift文件–》根據(jù)需要,編譯.thrift文件,生成相應(yīng)的語(yǔ)言源代碼–》根據(jù)實(shí)際需要,編寫client端和server端代碼。</p><p>  a).thrift文件編寫</p><p>  一般將服務(wù)放到一個(gè).thrift文件中,服務(wù)的編寫語(yǔ)法與C語(yǔ)言語(yǔ)法基本一致,在.thrift文件中有

56、主要有以下幾個(gè)內(nèi)容:變量聲明、數(shù)據(jù)聲明(struct)和服務(wù)接口聲明(service, 可以繼承其他接口)。 </p><p>  b)client端和server端代碼編寫 </p><p>  client端和server端代碼要調(diào)用編譯.thrift生成的中間文件。</p><p>  在client端,用戶自定義CalculatorClient類型的對(duì)象(用

57、戶在.thrift文件中聲明的服務(wù)名稱是Calculator,則生成的中間代碼中的主類為CalculatorClient),該對(duì)象中封裝了各種服務(wù),可以直接調(diào)用(如client.ping()),然后thrift會(huì)通過(guò)封裝的rpc調(diào)用server端同名的函數(shù)。在server端,需要實(shí)現(xiàn)在.thrift文件中聲明的服務(wù)中的所有功能,以便處理client發(fā)過(guò)來(lái)的請(qǐng)求。如圖2.4所示。</p><p>  圖2.4 cl

58、ient端和server端的書寫</p><p>  2.4 Boost庫(kù)</p><p>  2.4.1 Boost庫(kù)簡(jiǎn)介</p><p>  Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一。Boost庫(kù)由C++標(biāo)準(zhǔn)委員會(huì)庫(kù)工作組成員發(fā)起,其中有些內(nèi)容有望成為下一代C++標(biāo)準(zhǔn)庫(kù)內(nèi)容。在C++社區(qū)中影響甚大,是不折

59、不扣的“準(zhǔn)”標(biāo)準(zhǔn)庫(kù)。Boost由于其對(duì)跨平臺(tái)的強(qiáng)調(diào),對(duì)標(biāo)準(zhǔn)C++的強(qiáng)調(diào),與編寫平臺(tái)無(wú)關(guān)。大部分Boost庫(kù)功能的使用只需包括相應(yīng)頭文件即可,少數(shù)(如正則表達(dá)式庫(kù),文件系統(tǒng)庫(kù)等)需要鏈接庫(kù)。</p><p>  2.4.2 Boost的log庫(kù)</p><p><b> ?。?)相關(guān)概念</b></p><p>  日志記錄:一個(gè)獨(dú)立的消息包,這

60、個(gè)消息包還不是實(shí)際寫到日志里的消息,它只是一個(gè)候選的消息。 </p><p>  屬性:日志記錄中的一個(gè)消息片。 </p><p>  屬性值:那就是上面所說(shuō)的屬性的值了,可以是各種數(shù)據(jù)類型。 </p><p>  日志槽(LOG SINK):日志寫向的目標(biāo),它要定義日志被寫向什么地方,以及如何寫。 </p><p>  日志源:應(yīng)用程序?qū)懭?/p>

61、志時(shí)的入口,其實(shí)質(zhì)是一個(gè)logger對(duì)象的實(shí)例。 </p><p>  日志過(guò)濾器:決定日志記錄是否要被記錄的一組判斷。 </p><p>  日志格式化:決定日志記錄輸出的實(shí)際格式。 </p><p>  日志核心:維護(hù)者日志源、日志槽、日志過(guò)濾器等之間的關(guān)系的一個(gè)全局中的實(shí)體。主要在初始化logging library時(shí)用到。 </p><p

62、><b> ?。?)框架結(jié)構(gòu)</b></p><p>  Boost log的框架結(jié)構(gòu)如圖2.5所示:</p><p>  圖2.5 Boost log的框架結(jié)構(gòu)</p><p>  A)應(yīng)用程序在圖的右側(cè),通過(guò)一個(gè)或多個(gè)logger實(shí)例發(fā)送日志消息。</p><p>  B)應(yīng)用程序也可以出現(xiàn)在左側(cè),那就是一個(gè)日

63、志的顯示實(shí)例了。</p><p>  C)一個(gè)日志記錄的數(shù)據(jù)中會(huì)包括許多屬性。屬性基本上是一個(gè)函數(shù),它的返回值就是屬性值。比如時(shí)間不僅是一個(gè)函數(shù)(也是一個(gè)屬性)。</p><p>  D)有三種類型的屬性集:全局的,特定線程的,特定源的。前兩個(gè)是由logging core來(lái)維護(hù)的,所以不用再初始化。</p><p>  全局屬性集中的屬性被連接到所以的日志對(duì)象上。&

64、lt;/p><p>  線程屬性集中的屬性會(huì)連接到把它注冊(cè)到屬性集時(shí)的那個(gè)線程。</p><p>  源屬性集由初始化日志的源來(lái)維護(hù)的,它會(huì)連接到一個(gè)特定的源上。</p><p>  當(dāng)一個(gè)源初始化日志對(duì)象的時(shí)候,它會(huì)從上述的三個(gè)屬性集的所有屬性中得到屬性值。這些值會(huì)在將來(lái)處理。</p><p>  如果在不同的屬性集中有相同的屬性名字的時(shí)候就會(huì)

65、造成沖突,解決沖突的方法是全局屬性集的優(yōu)先級(jí)最低,源屬性集的優(yōu)先級(jí)最高。高優(yōu)先級(jí)的屬性會(huì)覆蓋低優(yōu)先級(jí)的屬性。</p><p>  E)當(dāng)組合屬性值的時(shí)候,logging core來(lái)決定一個(gè)屬性是否要被送到sink中,這就是過(guò)濾。有兩層過(guò)濾,首先應(yīng)用的是全局中過(guò)濾,全局過(guò)濾用來(lái)快速的過(guò)濾掉那些不需要的日志記錄。然后 就是sink指定的過(guò)濾了。每個(gè)sink都有單獨(dú)的過(guò)濾器。sink過(guò)濾器允許將一個(gè)日志記錄定向到一個(gè)指

66、定的sink。</p><p>  F)如果一個(gè)日志記錄至少通過(guò)了一個(gè)sink的話,它就可以用了。這時(shí)候就是日志消息格式化的時(shí)候了。格式化完成的日志消息和屬性值一起被送到接收它們的sink中。</p><p>  G)如上圖所示,sink被分為前端和后端兩個(gè)部分。這是為了抽象sink的通用功能,如過(guò)濾和線程同步。前端由日志庫(kù)提供,用戶不大可能再去實(shí)現(xiàn)它。而后端 很可能是在日志庫(kù)的外面,它來(lái)

67、實(shí)現(xiàn)對(duì)日志記錄的處理。如寫文件,發(fā)送到網(wǎng)絡(luò)等。日志庫(kù)提供了大部分通常用到的后端程序。 </p><p>  2.5 QT GUI簡(jiǎn)介</p><p>  2.5.1 QT GUI簡(jiǎn)介和功能特點(diǎn)</p><p>  QT提供了設(shè)計(jì)師工具,可以很方便的使用鼠標(biāo)拖拽的方式繪制界面。繪制完畢后自動(dòng)生成一個(gè)界面的.h文件(如ui_mainwindow.h),其中含有一個(gè)自動(dòng)生

68、成的Ui_MainWindow類,這個(gè)類中核心的函數(shù)是setupUi,根據(jù)界面向?qū)У牟煌锩娼邮找粋€(gè)QWidget *參數(shù)或者QMainWindow *參數(shù)。這個(gè)函數(shù)會(huì)自動(dòng)在傳入的QWidget或QMainWindow上根據(jù)設(shè)計(jì)師繪制的界面創(chuàng)建可視化控件。使用這個(gè)自動(dòng)生成的類有兩種方式,一是在定義QWidget或QMainWindow時(shí)創(chuàng)建一個(gè)Ui_MainWindow類型的成員ui,在構(gòu)造函數(shù)中調(diào)用其setupUi方法ui.setup

69、Ui(this),或使用C++特有的多繼承方式,定義子類的時(shí)候同時(shí)以Ui_MainWindow作為基類,在構(gòu)造函數(shù)中直接調(diào)用setupUi(this)。這時(shí)已經(jīng)可以在自定義部件子類中顯示繪制的界面了。要訪問(wèn)繪制界面的可視化控件,根據(jù)上述兩種方式使用ui->控件名稱或者控件名稱直接進(jìn)行引用即可。</p><p>  2.5.2 信號(hào)和槽</p><p>  在圖形界面編程中,很多時(shí)候我

70、們希望一個(gè)可視對(duì)象發(fā)生某種變化時(shí)通知另一個(gè)或幾個(gè)對(duì)象,再一個(gè)地說(shuō),我們希望任何一類的對(duì)象能和其他對(duì)象進(jìn)行通訊。例如,某 個(gè)數(shù)值顯示窗口負(fù)責(zé)顯示某個(gè)滾動(dòng)條對(duì)象的當(dāng)前數(shù)值,當(dāng)滾動(dòng)條對(duì)象的值發(fā)生變化時(shí),我們希望數(shù)值顯示窗口能收到來(lái)自滾動(dòng)條對(duì)象發(fā)送的“數(shù)值改變”的信號(hào),從而改變自己的顯示數(shù)值。 </p><p>  對(duì)于類似以上的問(wèn)題,較早的工具包使用“回調(diào)”的方式來(lái)實(shí)現(xiàn)?;卣{(diào)是指一個(gè)函數(shù)的指針,如果你希望一個(gè)處理函數(shù)同

71、志你一些事件,你可以把另一個(gè)函數(shù)的指針傳遞給處理函數(shù)。處理函數(shù)在適當(dāng)?shù)臅r(shí)候會(huì)調(diào)用回調(diào)函數(shù)。 </p><p>  采用回調(diào)方式實(shí)現(xiàn)對(duì)象間的通訊有兩個(gè)主要缺點(diǎn),首先回調(diào)函數(shù)不是類型安全的,我們不能確定處理函數(shù)使用了正確的參數(shù)來(lái)調(diào)用回調(diào)函數(shù),第二,回調(diào)函數(shù)和處理函數(shù)間的聯(lián)系非常緊密,因?yàn)樘幚砗瘮?shù)必須知道要調(diào)用哪個(gè)回調(diào)函數(shù)。</p><p>  在QT開發(fā)環(huán)境中,實(shí)現(xiàn)對(duì)象間的通訊我們有一種稱為“

72、信號(hào)和槽”的機(jī)制可以代替回調(diào)函數(shù)。信號(hào)和槽機(jī)制用于實(shí)現(xiàn)對(duì)象間的通訊,是QT的一個(gè)中心特性,恐怕也是QT與其它工具包最不同的地方了。 </p><p>  信號(hào)和槽機(jī)制就是:當(dāng)一個(gè)特定的事件發(fā)生時(shí),一個(gè)或幾個(gè)被指定的信號(hào)就被發(fā)射,槽就是一個(gè)返回值為void的函數(shù),如果存在一個(gè)或幾個(gè)槽和該信號(hào)相連接,那在該信號(hào)被發(fā)射后,這個(gè)(些)槽(函數(shù))就會(huì)立刻被執(zhí)行。 </p><p>  信號(hào)和槽機(jī)制是

73、類型安全的,一個(gè)信號(hào)的簽名必須與它的接收槽的簽名相匹配,這樣編譯器就可以幫助我們檢查類型是否匹配。信號(hào)和槽是很寬松的聯(lián)系在一起的,一個(gè)發(fā)射信號(hào)的對(duì)象不用考慮哪個(gè)槽會(huì)接收這個(gè)信號(hào),接收信號(hào)的槽的所在對(duì)象也不知道要連接的信號(hào)是哪個(gè)對(duì)象發(fā)射的。QT的信號(hào)和槽機(jī)制可以保證如果你把一個(gè)信號(hào)和一個(gè)槽連接起來(lái)后,槽會(huì)在正確的時(shí)間使用信號(hào)的參數(shù)而被調(diào)用,信號(hào)和槽可以使用任何數(shù)量、類型的參數(shù)。 </p><p>  QT的窗口部件

74、已經(jīng)有很多預(yù)定義的信號(hào),也有很多預(yù)定義的槽,但我們總是通過(guò)繼承來(lái)加入我們自己的信號(hào)和自己的槽,這樣我們就可以處理感興趣的信號(hào) 了。凡是從QObject類或者它的某個(gè)子類繼承的所有類都可以包含信號(hào)和槽。當(dāng)某個(gè)事件發(fā)生后,被指定的信號(hào)就會(huì)被發(fā)射,它不知道也沒有必要知道是否有 槽連接了該信號(hào),這就是信息封裝。 </p><p>  槽是可以用來(lái)接收信號(hào)的正常的對(duì)象的成員函數(shù),一個(gè)槽不知道它是否被其它信號(hào)連接??梢园岩粋€(gè)

75、信號(hào)和一個(gè)槽進(jìn)行單獨(dú)連接,這時(shí)槽會(huì)因?yàn)樵撔盘?hào)被發(fā)射 而被執(zhí)行;也可以把幾個(gè)信號(hào)連接在同一個(gè)槽上,這樣任何一個(gè)信號(hào)被發(fā)射都會(huì)使得該槽被執(zhí)行;也可以把一個(gè)信號(hào)和多個(gè)槽連接在一起,這樣該信號(hào)一旦被發(fā)射,與之相連接的槽都會(huì)被馬上執(zhí)行,但執(zhí)行的順序不確定,也不可以指定;也可以把一個(gè)信號(hào)和另一個(gè)信號(hào)進(jìn)行連接,這樣,只要第一個(gè)信號(hào)被發(fā)射,第二個(gè)信號(hào)立刻就被發(fā)射。 </p><p><b>  2.5.3 樣式表<

76、;/b></p><p>  QT中可以靈活的使用層疊樣式表(CSS),其語(yǔ)法和css很相似。因?yàn)镠TML CSS的靈活性,可以很方便的為QT界面設(shè)計(jì)自己需要的外觀。</p><p> ?。?) 各子對(duì)象設(shè)置樣式表</p><p>  部件的對(duì)象名調(diào)用樣式表,如下:</p><p>  comboBox->setStyleShee

77、t("QComboBox{border:1pxsolidgray;border-radius:3px;padding:1px18px1px3px;}");</p><p>  這樣單獨(dú)對(duì)該部件設(shè)置樣式表。需要注意的就是,當(dāng)后面再次使用setStyleSheet函數(shù)對(duì)comboBox設(shè)置樣式表時(shí),之前設(shè)置的樣式表就不起作用了,也即樣式被現(xiàn)在定義效果的取代了。</p><p&g

78、t;  如果想定義所有某一類控件(比如界面上所有的QComboBox)一個(gè)樣式,可以使用qApp進(jìn)行設(shè)置。</p><p> ?。?)使用qApp設(shè)置樣式表</p><p>  qApp是一個(gè)全局對(duì)象,使用其設(shè)置樣式表之后,部件就固定樣式了,當(dāng)然,后面使用某個(gè)子對(duì)象調(diào)用setStyleSheet函數(shù)時(shí),會(huì)只改變函數(shù)中設(shè)置的樣式,其他的樣式不會(huì)發(fā)生改變。</p><p&g

79、t;<b>  比如:</b></p><p>  qApp->setStyleSheet("QPushButton{border:2pxsolidblue;border-radius:6px;background-color:#E3EAA5;min-width:80px;}QComboBox{border:1pxsolidgray;border-radius:3px;pad

80、ding:1px18px1px3px;}QLineEdit{border:1pxsolidgray;border-radius:5px;padding:08px;selection-background-color:darkgray;}");</p><p>  這句話定義了按鈕、下拉框、行編輯框的樣式,界面中這三種部件都按照里面定義的樣式顯示。如果后面要對(duì)其中一個(gè)子部件的樣式進(jìn)行修改,可以直接調(diào)用se

81、tStyleSheet,將需要的樣式覆蓋覆蓋掉之前的,其他的保留,例如</p><p>  pushButton->setStyleSheet("QPushButton{background-color:red;}");</p><p>  這樣就只改變按鈕的背景色,邊框大小那些qApp定義好的還是不變。</p><p>  注意:當(dāng)很多部

82、件布局在一起時(shí),有時(shí)先使用qApp,然后在子部件中設(shè)置會(huì)出現(xiàn)意想不到的結(jié)果,這時(shí)只有不用qApp,直接對(duì)子部件進(jìn)行樣式表設(shè)置,每次樣式表元素都要設(shè)置全,因?yàn)閱为?dú)設(shè)置會(huì)覆蓋掉之前的樣式表。</p><p>  2.5.4 QtWebKit</p><p>  QtWebkit模塊提供了一個(gè)在QT中使用web browser的engine,這使得我們?cè)赒T的應(yīng)用程序中使用萬(wàn)維網(wǎng)上的內(nèi)容變得很容

83、易,而且對(duì)其網(wǎng)頁(yè)內(nèi)容的控制也可以通過(guò)native controls 實(shí)現(xiàn)。</p><p>  QtWebkit具有渲染HTML,XHTML和SVG 文檔,使用CSS排版,運(yùn)行JavaScript等功能。</p><p>  在JavaScript 運(yùn)行環(huán)境和Qt object model直接的橋接技術(shù)使得自定義的QObject可以在JavaScript代碼中使用。和Qt network

84、module的整合使得網(wǎng)頁(yè)可以通過(guò)從服務(wù)器,本地文件系統(tǒng),甚至QT的資源系統(tǒng)中下載。</p><p>  另外為了提供渲染特性,可以使用HTML元素的contenteditable屬性,使HTML文檔可以被用戶編輯。</p><p>  為了使用Qtwebkit模塊中的類,我們需要在相關(guān)頭文件中加入 #include <QtWebKit>,在工程的pro文件中添加 QT +=

85、webkit語(yǔ)句。</p><p>  QWebView主要用來(lái)查看網(wǎng)頁(yè),一個(gè)QWebView的實(shí)例中有一個(gè)QWebPage。</p><p>  QWebPage可以訪問(wèn)這個(gè)頁(yè)面的文檔結(jié)構(gòu),它主要描述如Frames,the navigation history, 和編輯內(nèi)容的the undo/redo stack。</p><p>  HTML文檔可以嵌套到一個(gè)f

86、rameset中個(gè)frame中。HTML一個(gè)獨(dú)立的 frame是通過(guò)QWebFrame類展示的。這個(gè)類中包含了到JS window object的bridge和用于刷新的QPainter。每一個(gè)QWebPage擁有一個(gè)QWebFrame作為其main frame,一個(gè)main frame可以包含多個(gè)child frame。</p><p>  每一個(gè)的Frame都有一個(gè)自己的JavaScript Context。

87、QWebFrame::addToJavaScriptWindowObject()可以使Qt C++中的object從JavaScript函數(shù)中訪問(wèn)。QWebFrame::evaluateJavaScript()可以使用戶在C++代碼中直接運(yùn)行JavaScript代碼。</p><p>  一個(gè)HTML文檔中獨(dú)立的元素可以通過(guò)在同一個(gè)頁(yè)面中的DOM JavaScript 接口訪問(wèn)。對(duì)應(yīng)的類是QWebElement。

88、可以使用CSS選擇器通過(guò)QWebFrame's findAllElements()和findFirstElement()函數(shù)獲取QWebElement對(duì)象。</p><p>  QWebSetting提供了對(duì)瀏覽器常用的各種屬性,和各種設(shè)置的配置。如:JavaScript enabled,plugin enabled等。通過(guò)其默認(rèn)設(shè)置可以顯示所有QWebPage實(shí)例的默認(rèn)配置。個(gè)別的屬性可以通過(guò)

89、這個(gè)頁(yè)面的setting來(lái)設(shè)置。全局的Setting使用QWebSetting::globalSettings(),某個(gè)頁(yè)面的settings用QWebPage::settings()。</p><p>  QWebHsitory主要是用來(lái)存放QWebPage的訪問(wèn)歷史記錄,并且提供對(duì)于導(dǎo)航到相關(guān)頁(yè)面的支持。</p><p>  QWebHistoryInterface提供了一個(gè)實(shí)現(xiàn)訪問(wèn)歷

90、史連接的接口。</p><p>  自從WebKit支持Netscape Plugin API, Qt的應(yīng)用程序可以顯示當(dāng)前平臺(tái)上可用的常見plugin。為了使plugin的支持性可用,用戶必須安裝對(duì)應(yīng)的plugin,并且當(dāng)前應(yīng)用程序的QWebSetting::PluginEnabled設(shè)置為可用。</p><p>  QNetworkAccessManager是一個(gè)可以發(fā)送和接收數(shù)據(jù)的異

91、步API。它可以看做是post/put/get/head API。它也提供了對(duì)cookie和session的支持。</p><p><b>  3 系統(tǒng)需求分析</b></p><p>  云協(xié)作平臺(tái)的客戶端是整個(gè)云協(xié)作平臺(tái)與用戶交互的工具,是連接前端操作與后端處理的樞紐。由于客戶端是直接接觸用戶,就必須具有友好的操作界面,而且操作不能太復(fù)雜;操作遠(yuǎn)端的軟硬件資源,數(shù)

92、據(jù)在遠(yuǎn)距離傳輸又必須保證數(shù)據(jù)的安全性;作為客戶端程序也必須保證其一定范圍的可擴(kuò)展性。</p><p>  3.1 用戶需求分析</p><p>  云協(xié)作平臺(tái)是在資源調(diào)度管理系統(tǒng)的基礎(chǔ)上,將加入集群中各個(gè)節(jié)點(diǎn)的資源,例如Windows節(jié)點(diǎn)上的辦公軟件,專用型開發(fā)軟件,Linux機(jī)器上的Fluent等,集成到服務(wù)器上,用戶通過(guò)客戶端上的相應(yīng)操作,實(shí)現(xiàn)對(duì)由用戶通過(guò)客戶端直接操作管理。支持遠(yuǎn)程啟

93、動(dòng)桌面,并可將權(quán)限范圍內(nèi)的遠(yuǎn)程桌面共享給其他用戶,并支持客戶端和服務(wù)端之間的文件互傳。登陸客戶端的用戶是在服務(wù)器端的數(shù)據(jù)庫(kù)中配置,增刪改查可通過(guò)對(duì)服務(wù)器端對(duì)應(yīng)數(shù)據(jù)表的相應(yīng)操作,完成相關(guān)配置。對(duì)于登陸的用戶,有做用戶身份區(qū)分,不同身份的用戶所能看到的桌面應(yīng)用也不盡相同,這也是可以在服務(wù)器端配置的。因此客戶端必須包含以下功能:</p><p><b>  文件上傳和下載</b></p>

94、;<p>  用戶可通過(guò)文件上傳和下載功能實(shí)現(xiàn)服務(wù)端和客戶端之間的文件共享,以及遠(yuǎn)程桌面的登陸。</p><p><b>  執(zhí)行遠(yuǎn)端命令</b></p><p>  在實(shí)際的生產(chǎn)當(dāng)中,客戶端和服務(wù)器往往不在同一物理地點(diǎn),客戶端需要實(shí)時(shí)查看服務(wù)端有關(guān)信息以便做相應(yīng)操作,這時(shí),通過(guò)客戶端執(zhí)行遠(yuǎn)端命令功能就顯得十分重要了。除此之外,提交作業(yè),啟動(dòng)桌面也會(huì)較多

95、的用到執(zhí)行遠(yuǎn)端命令這一功能。</p><p><b>  查看節(jié)點(diǎn)信息</b></p><p>  在實(shí)際使用過(guò)程中,客戶端需要對(duì)添加到服務(wù)端的節(jié)點(diǎn)資源信息進(jìn)行實(shí)時(shí)監(jiān)控,以獲取各個(gè)節(jié)點(diǎn)的準(zhǔn)確信息,并將節(jié)點(diǎn)信息以數(shù)據(jù)表格的方式顯示給用戶。</p><p><b>  啟動(dòng)遠(yuǎn)程桌面</b></p><p&g

96、t;  在服務(wù)器端的JH scheduler上配置資源,資源運(yùn)行節(jié)點(diǎn)狀態(tài)為”ok”,此時(shí)啟動(dòng)遠(yuǎn)程桌面,JH scheduler自動(dòng)為用戶分配資源,用戶等待桌面啟動(dòng)。桌面啟動(dòng)后,可將桌面共享給其他用戶,共享模式須有區(qū)分:觀察者模式共享和交互模式共享。如圖3.1所示。</p><p><b>  管理遠(yuǎn)程桌面</b></p><p>  對(duì)于有操作權(quán)限的用戶,可以將已有的

97、遠(yuǎn)程桌面以觀察者模式或是交互模式共享給其他用戶,以供其他用戶查看或是操作。而管理員可以關(guān)閉其他非管理員啟動(dòng)的遠(yuǎn)程桌面,將不再運(yùn)行的圖形桌面關(guān)閉,釋放資源,以實(shí)現(xiàn)資源的最大化利用。</p><p>  圖3.1啟動(dòng)遠(yuǎn)程桌面流程圖</p><p><b>  提交作業(yè)</b></p><p>  用戶在登錄客戶端時(shí)需做有效性驗(yàn)證,驗(yàn)證通過(guò)后即可登錄

98、到操作頁(yè)面,通過(guò)客戶端可以提交一個(gè)作業(yè)。此時(shí),服務(wù)端需將作業(yè)相關(guān)信息,例如作業(yè)號(hào)(有JH scheduler自動(dòng)分配),作業(yè)名(用戶輸入),運(yùn)行節(jié)點(diǎn)(JH scheduler自動(dòng)分配),作業(yè)狀態(tài)(JH scheduler根據(jù)作業(yè)運(yùn)行狀態(tài)設(shè)定)等信息插入到服務(wù)器端數(shù)據(jù)庫(kù)作業(yè)信息列表中。如圖3.2所示。</p><p><b>  作業(yè)數(shù)據(jù)管理</b></p><p> 

99、 用戶可通過(guò)作業(yè)數(shù)據(jù)管理頁(yè)面對(duì)已經(jīng)提交的作業(yè)進(jìn)行查看,包括作業(yè)名、作業(yè)號(hào)、運(yùn)行節(jié)點(diǎn)、開始運(yùn)行時(shí)間、結(jié)束時(shí)間、運(yùn)行狀態(tài)等,當(dāng)作業(yè)條數(shù)較多時(shí),可以將已完成的作業(yè)信息進(jìn)行刪除操作。</p><p>  客戶端桌面上顯示的應(yīng)用圖標(biāo)是根據(jù)服務(wù)器端相應(yīng)xml文件動(dòng)態(tài)生成的,所以,客戶端的可擴(kuò)展性就非常的好了,如果想集成一些更多的應(yīng)用,只需修改服務(wù)器端相應(yīng)的配置文件即可。</p><p>  除此之外,

100、客戶端還需易于安裝部署,配置須簡(jiǎn)單明白。</p><p>  3.2 性能需求分析</p><p><b>  運(yùn)行環(huán)境</b></p><p>  作為輕量級(jí)的云協(xié)作平臺(tái)的用戶訪問(wèn)終端,客戶端的運(yùn)行環(huán)境,以及對(duì)軟硬件的要求不能太高。具體軟硬件配置如下:</p><p>  處理器:Intel CORE I3</p

101、><p>  圖3.2 提交作業(yè)流程</p><p><b>  內(nèi)存: 2GB</b></p><p><b>  硬盤: 50GB</b></p><p>  操作系統(tǒng):Windows XP 及以上版本</p><p>  對(duì)于32位或是64位系統(tǒng),有不同的軟件安裝包以供不

102、同位數(shù)操作系統(tǒng)使用。</p><p><b>  響應(yīng)時(shí)間</b></p><p>  由于客戶端需要將用戶操作的相關(guān)信息發(fā)送給服務(wù)器,服務(wù)器得到相關(guān)信息后需作出相應(yīng)操作,此操作會(huì)在其他節(jié)點(diǎn)上進(jìn)行,因此,用戶操作響應(yīng)時(shí)間不能太長(zhǎng),啟動(dòng)遠(yuǎn)程桌面時(shí)間不能超過(guò)30秒鐘,關(guān)閉遠(yuǎn)程桌面不能超過(guò)3秒鐘,而客戶端的數(shù)據(jù)列表的顯示刷新過(guò)程不能超過(guò)2秒鐘。</p><

103、;p><b>  資源消耗</b></p><p>  作為客戶端程序,有可能會(huì)較長(zhǎng)時(shí)間在客戶機(jī)上運(yùn)行,因此,必須保證不能存在內(nèi)存泄露,對(duì)于程序中從內(nèi)存開辟的空間,在使用完之后需及時(shí)釋放,以節(jié)省內(nèi)存空間。在客戶端運(yùn)行時(shí),不能將CPU獨(dú)占,使客戶端機(jī)器其他功能受到影響。</p><p>  由于客戶端的數(shù)據(jù)都是從服務(wù)器端獲取到,然后再顯示到客戶端相應(yīng)的位置,其中涉

104、及比較多的是數(shù)據(jù)列表,這樣就為客戶端處理數(shù)據(jù)節(jié)省了大量時(shí)間,</p><p>  使得客戶端程序在本地系統(tǒng)開銷大大減小,從而節(jié)省了客戶端系統(tǒng)的軟硬件資源。</p><p>  用戶從客戶端登錄成功進(jìn)入桌面,如果長(zhǎng)時(shí)間(半個(gè)小時(shí))不做任何操作,相當(dāng)于待機(jī),此時(shí),此時(shí)服務(wù)器端的session將會(huì)過(guò)期,繼續(xù)操作會(huì)跳到登錄界面,這樣保證了個(gè)人操作的相對(duì)獨(dú)立。</p><p>

105、;  3.3 數(shù)據(jù)需求分析</p><p> ?。?)E-R圖 根據(jù)需求分析,本系統(tǒng)中涉及到的實(shí)體有:用戶,作業(yè)等。如圖3.3是用戶實(shí)體的實(shí)體屬性圖。</p><p>  圖3.3 用戶實(shí)體屬性圖</p><p>  除了用戶這一實(shí)體外,本系統(tǒng)中還有作業(yè)這一實(shí)體,如圖3.4是作業(yè)實(shí)體的實(shí)體屬性圖。</p><p>  圖3.4 作業(yè)實(shí)體屬性圖

106、</p><p><b> ?。?)數(shù)據(jù)字典</b></p><p><b>  編號(hào):D1</b></p><p><b>  名稱:用戶表</b></p><p>  描述:記錄用戶基本信息</p><p>  結(jié)構(gòu):用戶名,密碼,用戶組</p

107、><p><b>  編號(hào):D2</b></p><p><b>  名稱:作業(yè)表</b></p><p>  描述:記錄作業(yè)基本信息</p><p>  結(jié)構(gòu):作業(yè)號(hào),作業(yè)名,用戶名,作業(yè)詳情,操作時(shí)間,運(yùn)行節(jié)點(diǎn)</p><p> ?。?)系統(tǒng)主要功能的數(shù)據(jù)流圖 在對(duì)系統(tǒng)中所用

108、到的實(shí)體模型進(jìn)行了設(shè)計(jì)之后,下面就是對(duì)各活動(dòng)圖的描述,對(duì)于他們之間的行為和交互作用,以及怎樣進(jìn)行生效。</p><p>  用戶功能:用戶登陸系統(tǒng)后進(jìn)行提交作業(yè),其中數(shù)據(jù)流程圖如圖3.5所示。</p><p>  圖3.5 提交作業(yè)數(shù)據(jù)流圖</p><p><b>  4 系統(tǒng)概要設(shè)計(jì)</b></p><p>  客戶端

109、整體采用現(xiàn)在主流的扁平化顯示風(fēng)格,在設(shè)計(jì)模式方面采用觀察者模式。</p><p>  4.1 軟件體系結(jié)構(gòu)設(shè)計(jì)</p><p>  用戶使用前端設(shè)備,如個(gè)人電腦,筆記本電腦、pad等,通過(guò)客戶端操作共享資源,數(shù)據(jù)與后端服務(wù)器交互,后端服務(wù)器與云資源進(jìn)行交互,下發(fā)操作與數(shù)據(jù),并獲得數(shù)據(jù)返回,服務(wù)器將返回的數(shù)據(jù)返回用戶客戶端進(jìn)行呈現(xiàn),如圖4.1所示。</p><p> 

110、 圖4.1 云協(xié)作平臺(tái)的整體結(jié)構(gòu)</p><p>  4.2 系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)</p><p>  本文使用的數(shù)據(jù)庫(kù)是PostgreSQL,作為一個(gè)在Linux平臺(tái)上運(yùn)行的數(shù)據(jù)庫(kù),它在數(shù)據(jù)管理支持方面有良好的特性,并且可以由人來(lái)隨意的進(jìn)行修改按照自己的意愿擴(kuò)充接口進(jìn)而實(shí)現(xiàn)需要的功能。</p><p>  在數(shù)據(jù)庫(kù)中建立關(guān)系表,數(shù)據(jù)庫(kù)包含以下業(yè)務(wù)實(shí)體:用戶信息表,作業(yè)

111、信息表等。</p><p> ?。?)用戶表 表名:user_info,結(jié)構(gòu)如下表4.1所示。</p><p>  表4.1 用戶信息表</p><p> ?。?)作業(yè)信息表 表名:job_info,結(jié)構(gòu)如下表4.2所示。</p><p>  表4.2 作業(yè)信息表</p><p>  對(duì)應(yīng)的每種業(yè)務(wù)實(shí)體類型在進(jìn)行邏輯建

112、模后,通過(guò)相應(yīng)的工具生成到數(shù)據(jù)實(shí)體中,所產(chǎn)生的關(guān)系如圖4.2所示。</p><p>  圖4.2 系統(tǒng)整體E-R圖</p><p>  4.3 系統(tǒng)的功能模塊設(shè)計(jì)</p><p>  云協(xié)作平臺(tái)客戶端的功能模塊如圖4.3所示:</p><p>  圖4.3 客戶端功能模塊圖</p><p><b>  文件上

113、傳和下載:</b></p><p>  在客戶端和服務(wù)端需要文件傳輸功能,用以完成從本地向服務(wù)器上傳文件,用戶從服務(wù)器端下載文件到本地,還有啟動(dòng)遠(yuǎn)程桌面登錄Windows系統(tǒng)時(shí),也需要拷貝logon文件到遠(yuǎn)程機(jī)器。</p><p>  文件傳輸工具使用FTP文件傳輸協(xié)議。有運(yùn)行于Linux節(jié)點(diǎn)的FTP服務(wù)器和Windows上的Client組成。通過(guò)命令行輸入完成文件上傳和下載,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論