校園代理服務器的設計與實現(xiàn)-畢業(yè)(完整版)資料_第1頁
校園代理服務器的設計與實現(xiàn)-畢業(yè)(完整版)資料_第2頁
校園代理服務器的設計與實現(xiàn)-畢業(yè)(完整版)資料_第3頁
校園代理服務器的設計與實現(xiàn)-畢業(yè)(完整版)資料_第4頁
校園代理服務器的設計與實現(xiàn)-畢業(yè)(完整版)資料_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

校園代理服務器的設計與實現(xiàn)--畢業(yè)(完整版)資料(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

校園代理服務器的設計與實現(xiàn)--畢業(yè)(完整版)資料(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)畢業(yè)設計校園代理服務器的設計與實現(xiàn)大學年6月畢業(yè)設計校園代理服務器的設計與實現(xiàn)學生:指導教師:專業(yè):網(wǎng)絡工程所在單位:計算機科學與工程學院答辯日期:年6月19日摘要隨著Internet在全世界的普及,越來越多的用戶正在將自己的個人計算機連入網(wǎng)絡。然而,Internet訪問范圍的擴大,對網(wǎng)絡管理者提出了更高的要求。在決定如何對網(wǎng)絡訪問進行管理時,需要綜合考慮經(jīng)濟投入、經(jīng)費控制、網(wǎng)絡安全以及內(nèi)容管理等諸多方面的問題,而使用代理服務器軟件系統(tǒng)是解決這一系列問題的有效途徑。代理服務器是介于瀏覽器和WEB之間的一臺服務器,能夠?qū)g覽器請求進行各種各樣的處理,起到很好的訪問控制作用。它的工作原理是,接收客戶機的數(shù)據(jù)連接請求,并將請求傳給Web服務器;再從Web服務器接收返回的數(shù)據(jù),最后把數(shù)據(jù)傳給客戶端顯示。本論文設計并實現(xiàn)了一個簡單的代理服務器,采用客戶機/服務器結(jié)構(gòu)進行開發(fā)。系統(tǒng)主要包括三個功能模塊,分別為主守護進程模塊、代理服務模塊、緩存管理模塊。主守護進程模塊主要負責代理服務器的初始化,提供監(jiān)聽代理服務的端口;代理服務模塊主要是負責處理客戶端的請求,提供代理服務;緩存管理模塊主要是對緩存區(qū)進行管理,包括緩存區(qū)的更新策略和更新方式等。為了方便分析和設計,系統(tǒng)設計中設置不同的狀態(tài)量用于標識客戶機、代理服務器及服務器間的聯(lián)結(jié)狀態(tài)。在保證系統(tǒng)基本功能的同時,使用多線程機制使得代理系統(tǒng)有更好的延續(xù)性。該代理系統(tǒng)具有簡單、易用、網(wǎng)絡化等優(yōu)點,能夠完成一般的HTTP訪問代理服務。關(guān)鍵詞代理服務器;C/S結(jié)構(gòu);套接字;網(wǎng)絡編程

AbstractAlongwiththepopularityofInternetallovertheworld,moreandmorepeopleconnecttheircomputerstothenetwork.However,withtheenlargementoftherangeofaccessinInternet,itprovedtobeachallengetothosenetworkmanagers.Whentheymakeadecisionabouthowtomanageanetwork,theyhavetothinkitovertogetherwiththepolicyofinvestment,expenditurecontrol,networksecurityandmanagementofcontentofaccessandsoon.Aproxyserversystemwouldbeaneffectiveresolutiontothisproblem.TheproxyserverisaserverwhichsituatesbetweenbrowserandaWEBserver.Itcanrequestavarietyofprocessing,playaverygoodaccesscontrol.It’sprincipleofworkisthatitreceivestheconnectionrequestfromtheclient,andhandsdowntherequestedtotheWebserver,thenreceivesdatawhichisreturnedfromtheWebserver,finallyhandsitdownthedatatotheclient.Thisthesisdesignsandimplementsasimpleproxyserver,usingclient/serverstructurewasdeveloped.Thesystemmainlyincludesthreemodulesrespectivelythemaindaemonmodule,servicemoduleagent,cachemanagementmodule.Mainguardprocessmoduleismainlyresponsiblefortheinitializationoftheproxyserverandportofthelisteningagentservice;proxyservicemodulemainlyisresponsibleforhandlingtheclient'srequest,provideserviceproxy;cachemanagementmoduleismainlyforbuffermanagement,includingthebuffercacheupdatestrategyandupdate.Tofacilitateanalysisanddesign,thesystemsetsdifferentstatestoidentifyclient,proxyserverandtheconnectivestatesbetweenservers.Whenthesystem’sbasicfunctionareguaranteed,itusethemultithreadingtoenabletheproxyservertohaveabetterduration.Thisproxysystemhasthemeritsuchassimple,easytouse,networkandsoon,anditcancompletetheproxyofgeneralHTTPvisit.KeywordsProxyServer;Client/ServerStructure;Socket;NetworkProgramming

目錄TOC\o"1-3"\u摘要 IAbstract II第1章緒論 11.1選題的背景 11.2課題研究意義和目的 1第2章系統(tǒng)開發(fā)工具及開發(fā)平臺 32.1開發(fā)語言 32.2開發(fā)平臺 44結(jié)構(gòu) 52.3網(wǎng)絡編程技術(shù) 52.4運行環(huán)境 6第3章代理服務器的理論基礎 73.1主要功能 73.2主要作用 83.3基本原理 93.4工作流程 10第4章代理服務器系統(tǒng)分析 134.1設計目標 134.2需求分析 13性能需求分析 14功能需求分析 14可行性分析 15第5章代理服務器的設計與實現(xiàn) 165.1總體設計 165.2詳細設計 16主守護進程模塊 16代理服務模塊 18緩存管理模塊 195.3系統(tǒng)實現(xiàn) 20主守護進程模塊的實現(xiàn) 21代理服務模塊的實現(xiàn) 22緩存管理模塊的實現(xiàn) 23第6章系統(tǒng)測試 246.1系統(tǒng)測試概述 246.2代理服務器系統(tǒng)的測試 24訪問網(wǎng)頁測試 25登錄QQ測試代理服務器 27總結(jié) 29致謝 30參考文獻 31

第1章緒論1.1選題的背景隨著Internet的普及和不斷增長,越來越多用戶開始訪問網(wǎng)絡。2021年底統(tǒng)計Internet的人數(shù)已經(jīng)達到30億,Internet指數(shù)級的增長導致了沉重的的網(wǎng)絡負載和網(wǎng)絡服務響應時間的遲緩。隨著Internet的高速發(fā)展,越來越多的企業(yè)需要通過Internet與外界進行更多的聯(lián)系。出于安全性和促進業(yè)務發(fā)展的考慮,一方面各種各樣的代理服務器(APACHE、WINPROXY)應運而生,同時幾乎所有的防火墻產(chǎn)品都融入了應用代理的功能。大量的數(shù)據(jù)要通過代理服務器進出企業(yè)內(nèi)部網(wǎng),隨著數(shù)據(jù)量的日益增大,代理服務器所能承受的并發(fā)連接數(shù)量和所要處理的網(wǎng)絡吞吐量越來越大,如何設計高性能的代理服務器成為一個倍受關(guān)注的問題。1.2課題研究意義和目的隨著Internet與Intranet的飛速發(fā)展,作為連接Internet與Intranet的橋梁,代理服務器在實際應用中發(fā)揮著及其重要的作用。它可用于多個目的,最基本的功能是連接,此外還包括安全性、緩存、內(nèi)容過濾、訪問控制管理等功能。在代理服務器的眾多功能中,安全性是一個突出且敏感的功能。絕大多數(shù)企業(yè)、部門在使用代理服務器的時候,都會考慮這個問題,把它作為選購代理服務器產(chǎn)品的重要依據(jù)。代理服務器是介于瀏覽器和Web服務器之間的一臺服務器,其工作主要在OSI模型的會話層,它提供了一個有效訪問Internet的途徑,它的實施在校園網(wǎng)管理中有如下優(yōu)勢:1.解決校園網(wǎng)中IP資源不足的矛盾除了清華大學等少數(shù)幾個學校分配到B類IP地址外,大部分學校分到的IP地址都是C類地址,在校園網(wǎng)的運行管理中IP資源十分緊張。在滿足學校管理、辦公自動化、教師教學研究等主要要求后,根本就不可能給各院系學生機房中的每一臺計算機再配一個固定的IP地址,這樣做是不經(jīng)濟的,也是不必要的。采用代理服務器,僅給此代理服務器一個真實的IP地址,而與此代理服務器相連的內(nèi)部網(wǎng)計算機由代理服務器分配一個虛擬的地址塊即可,這樣既節(jié)約了IP地址,又可以使所有學生用機間接地與Internet相連,共享Internet資源。2.可緩解校園網(wǎng)中傳輸速度不高的矛盾盡管網(wǎng)絡傳輸速率得到了很大的提高,但傳輸效率還是當前網(wǎng)絡發(fā)展的問題之一。一般情況下,校園網(wǎng)中計算機訪問Internet的資源都是與該資源站點建立連接和傳輸數(shù)據(jù)的一個過程,當多個計算機訪問相同的站點、下載相同的資料時,多個計算機就會與同一個站點進行多次連接,這樣既浪費時間,占用信道,又多花通訊費用。如果使用代理服務器,代理服務器會將訪問過的資源信息保存在服務器的Cache中,內(nèi)部網(wǎng)中客戶機隨后對同樣資源的訪問可直接從代理服務器中獲取,不必建立外部連接及從內(nèi)部外部傳輸,即加快了訪問速度,又節(jié)約了上網(wǎng)費用。3.可實現(xiàn)各院系學生機房的費用管理使用代理服務器,對外它是一個IP地址單位,可作為一個收費用戶向?qū)W校管理部門交費;而對機房內(nèi)部,它又是一個管理機構(gòu),可實現(xiàn)機房內(nèi)部的管理,并對網(wǎng)絡內(nèi)外的通訊過程進行審計、跟蹤、記錄,它既可定期將這些記錄日志存入文件,也可存入數(shù)據(jù)庫,這些信息為實現(xiàn)網(wǎng)絡的審計和計費提供了依據(jù)。4.可實現(xiàn)對校園網(wǎng)的安全訪問控制若校園網(wǎng)不加防范地連入Internet,很容易受到入侵者的攻擊,嚴重時會導致網(wǎng)絡的癱瘓,防火墻技術(shù)正是在Internet上使用的一種安全保障措施,它可以按照用戶事先規(guī)定的方案控制信息的流入和流出,監(jiān)督和控制使用者的操作。目前防火墻的實現(xiàn)技術(shù)主要有兩種,即基于路由器的包過濾技術(shù)和基于代理服務器控制技術(shù)。如果采用代理服務器,只是代理服務器直接與Internet相連,而內(nèi)部網(wǎng)的機器不直接與Internet相連,客戶機的內(nèi)部資源不會受到侵犯,同時,又可以在代理服務器上控制內(nèi)部網(wǎng)客戶機對Internet資源和服務的訪問。如限制某種用戶使用某種Internet服務,限制某種用戶訪問某些Internet站點,比如說,允許某些用戶訪問國外站點,允許某些用戶僅訪問國內(nèi)免費網(wǎng)站,允許某些用戶只能訪問校園網(wǎng)內(nèi)資源等[1]。

第2章系統(tǒng)開發(fā)工具及開發(fā)平臺2.1開發(fā)語言Java是一種可以撰寫跨平臺應用軟件的面向?qū)ο蟮某绦蛟O計語言。Java技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用于PC、數(shù)據(jù)中心、游戲控制臺、科學超級計算機、移動和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。Java作為一種高級的程序語言,具有眾多的優(yōu)點。Java特性主要有以下幾點內(nèi)容。(1)簡單。Java語法是C++語法的一個“純凈”和“升華”的版本。Java舍去了C++中很少使用、難于理解、易混淆的內(nèi)容提供了大量的類庫,使得編程更易學,讓更多計算機愛好者加入到了程序員的隊伍中。同時其保留了C++的精華,使原來的C++程序員能夠順利地轉(zhuǎn)入到Java的使用中來。(2)可移植性。Java引以為傲的“一次編譯,到處運行”,可以方便地將Java部署到任何不同平臺的計算機上。(3)面向?qū)ο?。Java是純面向?qū)ο蟮木幊陶Z言,程序員可以用面向?qū)ο蟮乃枷雭磉M行程序的編寫與設計,能夠創(chuàng)建或使用可重用的組件,使得程序更容易編寫和維護。(4)分布式。Java在網(wǎng)絡方面的強大是其它任何語言無法比擬的,可以通過其提供的類庫方便地處理各種網(wǎng)絡協(xié)議,把打開套接字連接等煩瑣的網(wǎng)絡任務變得非常容易。(5)健壯性。Java編譯器會檢查出很多其它語言在運行時才顯示出來的錯誤。Java采用的指針模型可以消除重寫內(nèi)存和數(shù)據(jù)崩潰的可能。(6)多線程。多線程編譯的簡單性是Java成為流行的服務器端開發(fā)語言的主要原因之一。(7)安全。Java是目前最安全的語言之一。目前極少的語言本身具有安全性的開發(fā)平臺,用Java可以構(gòu)建防病毒和防篡改的系統(tǒng)。(8)動態(tài)。Java可隨意增加新的方法以及實例變量,而客戶端卻不需要做任何的改動。動態(tài)的特性也是Java在互聯(lián)網(wǎng)中興盛不衰的法寶。(9)體系結(jié)構(gòu)中立。字節(jié)碼與計算機體系結(jié)構(gòu)無關(guān),只要存在運行時系統(tǒng),可在多種處理器上執(zhí)行。Java是在字節(jié)碼的層次上跨平臺,而C++只是在源碼的層次上跨平臺[2]。2.2開發(fā)平臺Eclipse是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse附帶了一個標準的插件集,包括Java開發(fā)工具(JavaDevelopmentKit,JDK)。雖然大多數(shù)用戶很樂于將Eclipse當作Java集成開發(fā)環(huán)境(IDE)來使用,但Eclipse的目標卻不僅限于此。Eclipse還包括插件開發(fā)環(huán)境(Plug-inDevelopmentEnvironment,PDE),這個組件主要針對希望擴展Eclipse的軟件開發(fā)人員,因為它允許他們構(gòu)建與Eclipse環(huán)境無縫集成的工具。由于Eclipse中的每樣東西都是插件,對于給Eclipse提供插件,以及給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。這種平等和一致性并不僅限于Java開發(fā)工具。盡管Eclipse是使用Java語言開發(fā)的,但它的用途并不限于Java語言;例如,支持諸如C/C++、COBOL、PHP、Android等編程語言的插件已經(jīng)可用,或預計將會推出。Eclipse框架還可用來作為與軟件開發(fā)無關(guān)的其他應用程序類型的基礎,比如內(nèi)容管理系統(tǒng)。Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境(IDE)。最初主要用來Java語言開發(fā),通過安裝不同的插件Eclipse可以支持不同的計算機語言,比如C++和Python等開發(fā)工具。Eclipse的本身只是一個框架平臺,但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。Eclipse最初由OTI和IBM兩家公司的IDE產(chǎn)品開發(fā)組創(chuàng)建,起始于1999年4月。IBM提供了最初的Eclipse代碼基礎,包括Platform、JDT和PDE。Eclipse項目IBM發(fā)起,圍繞著Eclipse項目已經(jīng)發(fā)展成為了一個龐大的Eclipse聯(lián)盟,有150多家軟件公司參與到Eclipse項目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。Eclipse是一個開放源碼項目,它其實是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其開放源碼,任何人都可以免費得到,并可以在此基礎上開發(fā)各自的插件,因此越來越受人們關(guān)注。隨后還有包括Oracle在內(nèi)的許多大公司也紛紛加入了該項目,Eclipse的目標是成為可進行任何語言開發(fā)的IDE集成者,使用者只需下載各種語言的插件即可。Eclipse是一個開放源代碼的軟件開發(fā)項目,專注于為高度集成的工具開發(fā)提供一個全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺。它主要由Eclipse項目、Eclipse工具項目和Eclipse技術(shù)項目三個項目組成,具體包括四個部分組成--EclipsePlatform、JDT、CDT和PDE。JDT支持Java開發(fā)、CDT支持C開發(fā)、PDE用來支持插件開發(fā),EclipsePlatform則是一個開放的可擴展IDE,提供了一個通用的開發(fā)平臺。它提供建造塊和構(gòu)造并運行集成軟件開發(fā)工具的基礎。EclipsePlatform允許工具建造者獨立開發(fā)與他人工具無縫集成的工具從而無須分辨一個工具功能在哪里結(jié)束,而另一個工具功能在哪里開始。2.2.2C/S結(jié)構(gòu)C/S又稱Client/Server或客戶/服務器模式,是為人所熟知的軟件系統(tǒng)體系結(jié)構(gòu)。服務器通常采用高性能的PC、工作站或小型機,并采用大型數(shù)據(jù)庫系統(tǒng),如Oracle、Sybase、Informix或SQLServer??蛻舳诵枰惭b專用的客戶端軟件。C/S的優(yōu)點是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務器。對應的優(yōu)點就是客戶端響應速度快??蛻?服務器模式工作時要求有一套為客戶機和服務器所共識的慣例來保證服務能夠被提供或被接受,這一套慣例包含了一套協(xié)議,它必須在通信的兩頭都被實現(xiàn)。根據(jù)不同的實際情況,協(xié)議可能是對稱的也可能是非對稱的。在對稱的協(xié)議中,每一方都有可能扮演主從角色;在非對稱協(xié)議中,一方是不可被改變的主機,而另一方則是從機。一個對稱協(xié)議的例子是Internet中用于終端仿真的Telnet,而非對稱協(xié)議的典型例子是HTTP協(xié)議。無論協(xié)議是對稱的或是非對稱的,當服務被提供時必然存在客戶進程和服務進程。2.3網(wǎng)絡編程技術(shù)代理服務技術(shù)是一臺PC機上安裝一套代理軟件,主要用于用戶對Internet資源的訪問,是典型的網(wǎng)絡應用軟件,要在Windows平臺上開發(fā)這樣的軟件,必須對Windows網(wǎng)絡編程的模式進行深入的研究和理解。Winsock是Windows的網(wǎng)絡編程接口,是Windows網(wǎng)絡編程事實上的標準。應用程序通過調(diào)用Winsock的API實現(xiàn)相互之間的通信,而Winsock利用下層的網(wǎng)絡通信協(xié)議功能和操作系統(tǒng)調(diào)用實現(xiàn)實際的通信工作。套接字(Sockets)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡通信的基本操作單元。可以將套接字看做不同主機間的進程進行雙向通信的端點,它構(gòu)成了在單個主機內(nèi)及整個網(wǎng)絡間的編程界面。套接字存在于通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。套接字通常和同一個域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換可可能穿越域的界限,但這時一定要執(zhí)行某種解釋程序)。Windows規(guī)范支持單一的通信域,即Internet域。各種進程使用這個域,互相之間用Internet協(xié)議簇進行通信。套接字可以根據(jù)通信性質(zhì)分類,這種性質(zhì)對于用戶是可見的。應用程序一般僅在同一類的套接字間通信。套接字有兩種不同的類型,流套接字和數(shù)據(jù)報套接字:1.流套接字流套接字提供雙向的、有序的、無重復并且無記錄邊界的數(shù)據(jù)流服務,它適用于處理大量數(shù)據(jù)。網(wǎng)絡傳輸層可以將數(shù)據(jù)分散或集中到合適尺寸的數(shù)據(jù)包中。2.數(shù)據(jù)報套接字數(shù)據(jù)報套接字支持雙向的數(shù)據(jù)流,但并不保證數(shù)據(jù)傳輸?shù)目煽啃?、有序性和無重復性。也就是說,一個數(shù)據(jù)報套接字接收信息的進程有可能發(fā)現(xiàn)信息重復,或者和發(fā)出時的順序不同的情況。2.4運行環(huán)境軟件運行平臺:本系統(tǒng)設計運行在Windows2007操作系統(tǒng)環(huán)境下。硬件運行平臺:CPU:P100或以上。內(nèi)存:16M或以上。顯卡:普通VGA顯卡。顯示器:普通彩色顯示器。鍵盤:普通標準鍵盤。鼠標:標準鼠標。網(wǎng)絡環(huán)境:由于系統(tǒng)為C/S模式,所以要求在網(wǎng)絡環(huán)境下運行,結(jié)合本系統(tǒng)的網(wǎng)絡數(shù)據(jù)流量不大,10Mbps的網(wǎng)絡就足夠了。當前的網(wǎng)絡協(xié)議都能夠滿足這個要求,所以對網(wǎng)絡環(huán)境沒有特殊的要求。

第3章代理服務器的理論基礎3.1主要功能ProxyServer(代理服務器)是Internet鏈路級網(wǎng)關(guān)所提供的一種重要安全功能,它的工作主要在開放系統(tǒng)互聯(lián)(OSI)模型的對話層。主要的功能有:1.連接Internet與Intranet充當防火墻:因為所有內(nèi)部網(wǎng)的用戶通過代理服務器訪問外界時,只映射為一個IP地址,所以外界不能直接訪問到內(nèi)部網(wǎng);同時可以設置IP地址過濾,限制內(nèi)部網(wǎng)對外部網(wǎng)的訪問權(quán)限;另外,兩個沒有互聯(lián)的內(nèi)部網(wǎng),也可以通過第三方的代理服務器進行互聯(lián)來交換信息。2.節(jié)省IP開銷:由于所有用戶對外只占用一個IP,所以不必租用過多的IP地址,降低網(wǎng)絡的維護成本。這樣,局域網(wǎng)內(nèi)沒有與外網(wǎng)相連的眾多機器就可以通過內(nèi)網(wǎng)的一臺帶路服務器連接到外網(wǎng),大大減少費用。當然也有它不利的一面,如許多網(wǎng)絡黑客通過這種方法隱藏自己的真實IP地址,而逃過監(jiān)視。3.提高訪問速度:本身帶寬較小,通過帶寬較大的Proxy與目標連接。而且通常代理服務器都設置一個較大的硬盤緩沖區(qū),當有外界的信息通過時,同時也將其保存到緩沖區(qū)中,當其他用戶再訪問相同的信息時,則直接由緩沖區(qū)中取出信息,傳給用戶,從而達到提高訪問速度的目的。4.防止攻擊:隱藏本機的真實地址信息,還可以隱藏本機的IP,防止被黑客攻擊。通過分析指定IP地址,可以查詢到網(wǎng)絡用戶的目前所在地。例如,大家在一些論壇上看到,論壇中明確標出了發(fā)帖用戶目前所在地,這就是根據(jù)論壇會員登錄時的IP地址解析的。還有平時最為常用的顯IP版QQ,在“發(fā)送消息”窗口中,可以查看對方的IP及解析出的地理位置。而當使用相應協(xié)議的代理服務器后,就可以達到隱藏當前所在地地址的目的了。5.突破IP訪問限制:使用它可以訪問一些有IP禁止訪問的服務器,因為封鎖只禁止了主機和目標服務器的連接,但并沒有禁止主機與代理服務器的連接以及代理服務器與目標服務器的連接。代理服務器有許多種,大體來說有HTTP,F(xiàn)TP,SOCKET代理三種,其中由分透明和不透明代理。其中透明代理一般是網(wǎng)關(guān),是硬件,所以不討論透明代理。當機器通過代理服務器上網(wǎng)時,通訊是分兩次的,先是機器和代理服務器通訊,再是代理服務器和目的地址通訊。機器和代理服務器通訊時,目的IP是代理服務器的IP。代理服務器和目的地址通訊時,源IP是代理服務器的IP,當然外部的數(shù)據(jù)也是一樣的。在內(nèi)網(wǎng)中,出現(xiàn)的IP數(shù)據(jù),全是內(nèi)網(wǎng)和代理服務器的IP。因此,從IP包頭是看不出任何與外面通訊的信息的,只有從數(shù)據(jù)中才能看到。3.2主要作用代理服務器是一種網(wǎng)絡實體,又稱為萬維網(wǎng)高速緩存,代理服務器把最近的一些請求和響應暫存在本地磁盤中。當新請求到達時,若代理服務器發(fā)現(xiàn)這個請求與暫時存放的請求相同,就返回暫存的響應,而不需要按URL的地址再次去因特網(wǎng)訪問該資源。代理服務器可在客戶端或服務器端工作,也可在中間系統(tǒng)工作。圖3-1(a)是校園網(wǎng)不使用代理服務器的情況。這時,校園網(wǎng)中所有的PC都通過專線鏈路(R1-R2)與因特網(wǎng)上的源點服務器建立TCP連接。因而校園網(wǎng)各PC訪問因特網(wǎng)的通信量往往會使這條鏈路過載,使得時延大大增加。圖3-1(a)不使用代理服務器圖3-1(b)使用代理服務器圖3-1(b)是校園網(wǎng)使用代理服務器的情況,此時訪問因特網(wǎng)的過程如下:1.校園網(wǎng)PC中的瀏覽器向因特網(wǎng)的服務器請求服務時,就先和校園網(wǎng)的代理服務器建立TCP連接,并向代理服務器發(fā)出HTTP請求報文。2.若代理服務器已經(jīng)存放了所請求的對象,代理服務器就把這個對象放入HTTP響應報文中返回給PC的瀏覽器。3.否則,代理服務器就代表發(fā)出請求的用戶瀏覽器,與因特網(wǎng)上的源點服務器建立TCP連接,并發(fā)送HTTP請求報文。4.源點服務器把所請求的對象放在HTTP響應報文中返回給校園網(wǎng)的代理服務器。5.代理服務器收到這個對象后,先復制在自己的本地存儲器中(留待以后用),然后再把這個對象放在HTTP響應報文中,通過已建立的TCP連接,返回給請求該對象的瀏覽器。代理服務器有時是作為服務器(當接受瀏覽器的HTTP請求時),但有時卻作為客戶(當向因特網(wǎng)上的源點服務器發(fā)送HTTP請求時)。在使用代理服務器的情況下,由于有相當大一部分通信量局限在校園網(wǎng)的內(nèi)部,因此,專線鏈路(R1-R2)上的通信量大大減少,因而減少了訪問因特網(wǎng)的延時。3.3基本原理 代理服務器實質(zhì)上是一個人架設在內(nèi)部網(wǎng)絡用戶群體與Internet之間的橋梁,用以實現(xiàn)內(nèi)部網(wǎng)絡用戶對Internet的訪問[3]。代理服務器軟件需要安裝在一臺同時跨越外部網(wǎng)絡和內(nèi)部網(wǎng)絡的計算機上,換句話說,即需要這臺計算機配備兩個網(wǎng)絡接口:一個接口通過網(wǎng)絡適配器卡連接內(nèi)部局域網(wǎng)絡,另一個網(wǎng)絡接口連接Internet。連接Internet的網(wǎng)絡接口,可以是調(diào)制解調(diào)器撥號網(wǎng)絡,可以是ISDN網(wǎng)絡適配器,也可以是以太網(wǎng)適配器。這臺用作代理服務器的計算機或網(wǎng)絡服務器,通常被稱作“雙端口主機”或“雙宿主機”。內(nèi)部網(wǎng)絡則需要運行TCP/IP協(xié)議。當位于內(nèi)部局域網(wǎng)絡上的計算機請求訪問Internet時,先通過局域網(wǎng)將訪問請求提交給充當代理服務器的計算機,再由這臺計算機轉(zhuǎn)發(fā)到Internet上去;當代理服務器從Internet上接收請求的信息時,代理服務器將能識別這是局域網(wǎng)中哪臺計算機請求的內(nèi)容,并將它正確地傳送給該計算機,從而完成“代理服務”的職能。其基本功能結(jié)構(gòu),如圖3-2所示:圖3-2代理服務器基本功能結(jié)構(gòu)代理服務器有一個ServerSocket始終在進行端口監(jiān)聽,對于每個Web客戶機的請求,代理服務器生成一個連接服務線程進行處理,每個連接服務線程新開兩個Socket進行Socket進行數(shù)據(jù)傳遞:客戶端Socket首先接受Web客戶機的請求=1\*GB3①,經(jīng)過一系列處理后把請求=1\*GB3①轉(zhuǎn)變成為請求=2\*GB3②,由服務器Socket發(fā)往Web服務器,同時獲得服務器的響應=3\*GB3③,將其轉(zhuǎn)變?yōu)轫憫?4\*GB3④,通過客戶端Socket發(fā)往Web客戶機。代理服務器不僅可以實現(xiàn)提高瀏覽器速度和效率的功能,它還可以實現(xiàn)網(wǎng)絡的安全過濾、流量控制、用戶管理等功能,因此它既是一種網(wǎng)絡防火墻技術(shù),同時也可以解決許多單位連接Internet引起IP地址不足的問題。在一些規(guī)模較大的企業(yè)網(wǎng)絡內(nèi)部,為了便于管理和恰當?shù)目刂凭W(wǎng)絡信息流量,可以采取設置分級代理服務器的方法,來管理用戶上網(wǎng)。3.4工作流程通過在一臺Web主機上運行代理服務器軟件,監(jiān)測與偵聽來自網(wǎng)絡上各種信息,過濾訪問內(nèi)部網(wǎng)絡的數(shù)據(jù),保護內(nèi)部網(wǎng)絡不受破壞。在代理方式下,內(nèi)部網(wǎng)絡的數(shù)據(jù)包不能直接進入互聯(lián)網(wǎng),而互聯(lián)網(wǎng)的數(shù)據(jù)包也不可直接進入內(nèi)部網(wǎng)絡,均要經(jīng)過代理服務器的處理,通過網(wǎng)關(guān)復制傳遞數(shù)據(jù),因此代理服務器可以進行訪問控制和地址轉(zhuǎn)換,如圖3-3所示:圖3-3工作流程圖當代理服務器接受到用戶對某點的訪問請求后將檢查請求是否符合規(guī)定,若允許用戶訪問該站點,代理服務器便以客戶的身份去該站點取出信息轉(zhuǎn)發(fā)給用戶。代理服務器通常具有一個高速緩存,該高速緩存存儲了用戶經(jīng)常訪問的站點信息,若下一位用戶需要訪問同一站點信息,代理服務器不需要重新從站點獲取信息,可直接將高速緩存中的內(nèi)容發(fā)出即可,這樣可以提高網(wǎng)絡速度,并且使得網(wǎng)絡資源可以高效地被利用。代理服務器封裝并保護了內(nèi)部網(wǎng)絡資源,互聯(lián)網(wǎng)用戶不能直接訪問。代理服務器進行網(wǎng)絡傳輸?shù)倪^程如下:(1)內(nèi)部網(wǎng)絡主機若要訪問遠程服務器上的一個網(wǎng)頁,先生成一個請求并將請求信息傳送給與遠程網(wǎng)絡連接的網(wǎng)關(guān),即代理服務器;(2)代理服務器接收到請求后,先識別內(nèi)部主機試圖訪問的類型,若是Web網(wǎng)頁,則代理服務器將請求傳送到只處理HTTP會話的應用程序;(3)當HTTP應用程序收到請求時,需驗證ACL是否允許此類傳輸,若允許,則代理服務器將產(chǎn)生一個新請求發(fā)送給遠程服務器;(4)新請求被送到遠程服務器,遠程服務器向代理服務器發(fā)出回復信息,代理服務器收到回復信息后,再次將回復信息傳送給HTTP應用程序;(5)HTTP應用程序接著詳細查看遠程服務器發(fā)送的信息有無特殊情況,若可以接收,則將生成一個新分組,并把信息發(fā)送給內(nèi)部主機。

第4章代理服務器系統(tǒng)分析4.1設計目標本設計要實現(xiàn)一個簡單的代理服務器,并實現(xiàn)HTTP代理功能,服務器能夠建立服務,接收用戶請求,連接遠程Web服務器,并將遠程Web服務器上獲取的數(shù)據(jù)轉(zhuǎn)發(fā)給用戶。在對代理服務器進行設計時,需要考慮許多方面的因素,因為在現(xiàn)代網(wǎng)絡中代理服務器的作用是多方面的。盡管由于網(wǎng)絡環(huán)境的差別很大,以及使用代理服務器的目的的不同,導致實現(xiàn)代理服務器的方案可能有很多,但不論采用何種代理服務器設計方案,要設計出高性能的代理服務器,都需要解決一些帶有共性的問題。一般來說,在設計代理服務器時,都要從以下幾個方面進行考慮:1.代理服務的多樣性:也就是通過協(xié)議的覆蓋率,客戶通過網(wǎng)絡代理服務系統(tǒng)應該得到全面的信息服務,這要求代理服務系統(tǒng)覆蓋相對較多的常用協(xié)議。代理協(xié)議是多少往往是衡量代理服務器性能的一個重要指標。2.代理服務的安全性:作為防火墻的一種解決方案,其提供的安全性顯然也是一個重要指標。3.管理功能的全面性:這對于代理服務系統(tǒng)的整體性能有著較大的影響。作為一個多用戶網(wǎng)絡應用系統(tǒng),對用戶以及用戶使用的平臺進行全面管理是其不可缺少的一個組成部分。4.代理服務的高效性:客戶通過網(wǎng)絡代理服務系統(tǒng)訪問Internet應該盡可能的減少延時,提高客戶的訪問質(zhì)量。5.已獲得信息的共享性:Internet與局域網(wǎng)(LAN)的傳輸速率在數(shù)量級上的差異,Internet與局域網(wǎng)的使用費也存在巨大的差異,使得用戶對已獲得信息的共享性提出了較高的要求,代理服務器的緩存機制正日益受到重視。要開發(fā)出具有一定同用性的代理服務器產(chǎn)品,在形成設計目標時應該充分考慮這種因素,并結(jié)合自身的需求進行綜合分析。4.2需求分析代理服務器的主要作用是為用戶提供訪問代理服務。它的工作過程是這樣的:代理服務器被啟動后,它首先在管理員指定的端口進行監(jiān)聽,當有客戶要求進行Internet訪問時,這個請求會發(fā)送到代理服務器,此時,代理服務器會審查這個請求,并啟動相應的代理服務程序?qū)⒖蛻舻恼埱蟀l(fā)送到Internet上去;當收到返回的內(nèi)容時,代理服務器能夠識別這是哪個客戶請求的內(nèi)容,并將這個內(nèi)容發(fā)送給這個客戶,這樣就完成了一次代理服務的過程。1.在使用代理服務器的工作模式下,內(nèi)部網(wǎng)所有Internet訪問都是通過代理服務器進行的,這就意味著可以通過代理服務器進行Internet訪問管理和網(wǎng)絡安全控制。2.由于網(wǎng)絡所有的Internet訪問活動都是通過代理服務器完成,因此,所有的Internet訪問活動在代理服務器上都是可見的,代理服務器應該能夠根據(jù)管理員的要求,顯示當時用戶訪問Internet的活動,或?qū)τ脩舻脑L問活動進行記錄,形成日志,供系統(tǒng)管理員查閱和分析。同時,日志也可以作為其它管理活動的依據(jù),比如訪問流量和費用的管理、訪問時間的管理等。代理服務器應該能夠處理內(nèi)部網(wǎng)用戶的并發(fā)請求,以提高響應速度。代理服務器一般是采用多線程的方法來處理用戶的并發(fā)請求的,當有用戶的請求到達時,代理服務器啟動一個新的線程處理用戶的請求;當一個用戶的請求處理結(jié)束后,為該用戶服務的線程也就結(jié)束了,并釋放系統(tǒng)資源。面對目前網(wǎng)絡的快速發(fā)展,為了確保代理服務器系統(tǒng)能夠長期、安全、穩(wěn)定、可靠、高效的運行,服務器系統(tǒng)應該能滿足以下性能需求:1.準確性和及時性:代理服務器系統(tǒng)處理的準確性和及時性是系統(tǒng)的必要性能。在系統(tǒng)設計和開發(fā)過程中,要充分考慮系統(tǒng)當前和將來可能承受的工作量。2.開放性和可擴充性:代理服務器系統(tǒng)在開發(fā)過程中,應該充分考慮以后的可擴充性。3.易用性和易維護性:代理服務器系統(tǒng)要實現(xiàn)這一點,就要求系統(tǒng)應該盡量使用用戶熟悉的術(shù)語和中文信息的界面;針對用戶可能出現(xiàn)的使用問題,要提供足夠的幫助文檔,縮短用戶對服務器系統(tǒng)熟悉的過程。4.數(shù)據(jù)錄入和處理的準確性和實時性、數(shù)據(jù)的一致性與完整性、數(shù)據(jù)的共享與獨立性。5.代理服務器系統(tǒng)軟件是Eclipse的環(huán)境下根據(jù)軟件工程原理,以及Java開發(fā)設計方法實例開發(fā)完成。根據(jù)課題論文的設計需求,結(jié)合目前代理服務器設計思想,本論文具有如下的功能需求:1.代理服務器要實現(xiàn)啟動服務、接受用戶代理請求、向目的服務器轉(zhuǎn)發(fā)用戶請求,從目的服務器上獲取數(shù)據(jù)、以及向用戶瀏覽器轉(zhuǎn)發(fā)數(shù)據(jù)和關(guān)閉服務器的功能,同時對多個用戶連接請求能夠及時響應的功能,因此要采用編程語言的多線程技術(shù)。以及要具有良好的用戶與服務器交互的界面,同時要提供管理員的管理界面。2.要去確保身份的安全連接,代理服務器要擁有對用戶合法身份的認證,服務器被安全的連接。同時為了服務器的監(jiān)控和管理,服務器要實現(xiàn)現(xiàn)在運行期間的日志進行記錄,保存用戶連接的重要信息,進行必要的信息管理。以及連接服務器所要的身份信息的記錄,并且寫入數(shù)據(jù)文件。3.無論用戶還是管理員,在使用代理服務器時都要擁有對自己的有關(guān)信息進行修改。其中管理員用戶既是信息的管理者又是信息的瀏覽者,其具有最高權(quán)限即具有對整個數(shù)據(jù)庫信息的增加、刪除、更改權(quán)限,而客戶在此系統(tǒng)中只能作為使用者以及管理自己的基本信息。4.代理服務器還必須維護一個內(nèi)存緩沖區(qū),用來存放從Internet上收到的內(nèi)容,當用戶請求的內(nèi)容在這個緩沖區(qū)中可以找到時,就直接將緩存區(qū)相應的內(nèi)容返回給用戶,而不用再次將用戶去請求提交到Internet上去,這樣不僅降低了網(wǎng)絡的通信流量,節(jié)省了網(wǎng)絡的通信費用,而且提高了代理服務器的響應速度。1.經(jīng)濟可行性:本系統(tǒng)僅需要一臺裝有Eclipse的環(huán)境即可實現(xiàn)系統(tǒng)的正常運行,最后僅需要一臺能夠連接因特網(wǎng)的計算機進行功能測試。2.技術(shù)可行性:由于此次論文設計采用的是實現(xiàn)中常用的Java編程語言的網(wǎng)絡編程功能,Java語言對網(wǎng)絡的支持體現(xiàn)了實現(xiàn)服務器的技術(shù)可行性。3.操作可行性:由于本次論文的設計調(diào)研的對象較多,校內(nèi)的網(wǎng)絡也采用的是代理服務器管理,通過現(xiàn)實中的代理服務器設計技術(shù),對設計性能良好,效率高的服務器有著極大的需要,使得實現(xiàn)服務器的操作是可行的。

第5章代理服務器的設計與實現(xiàn)5.1總體設計代理服務器主要包括三大模塊:(1)主守護進程模塊:這部分的功能主要是負責代理服務器的初始化,監(jiān)聽提供HTTP代理服務的端口,啟動一定數(shù)量的代理服務子進程并對進程池進行管理。(2)代理服務模塊:這部分主要是負責處理客戶端的請求,提供代理服務。(3)緩存管理模塊:這部分主要是負責提供對緩存的快速查詢、添加和刪除等維護工作。根據(jù)管理人員的設置,對代理服務器的緩存區(qū)進行管理,包括緩存區(qū)的更新策略和更新方式等。系統(tǒng)的結(jié)構(gòu)框架如圖5-1所示:圖5-1框架結(jié)構(gòu)5.2詳細設計普通的代理服務器是這樣工作的:主進程在某個綁定的端口上監(jiān)視,一旦有客戶請求到達,就通過fork()系統(tǒng)調(diào)用創(chuàng)建一個子進程,而主進程則繼續(xù)監(jiān)聽,由該子進程完成對客戶請求的代理服務,服務完成后子進程自動終止。這種代理服務器有一個明顯的缺點,由于fork()系統(tǒng)調(diào)用需花費較多的CPU時間,這樣當客戶比較多時,主進程就疲于創(chuàng)建子進程,代理服務器對客戶的響應速度就會很慢。為了盡可能加快連接的響應速度,采用了預先派生子進程的方法。主守護進程啟動,會先創(chuàng)建監(jiān)聽套接字,并對該套接字調(diào)用listen(),然后派生一組子進程,形成進程池。各個子進程會復制主進程的描述符字。子進程啟動會對從主進程繼承而來的套接字描述符調(diào)用accept(),沒有客戶請求時,所有子進程都進入睡眠,當一個客戶請求來到時,所有子進程被內(nèi)核同時喚醒,但只有最先被調(diào)度的子進程才能獲得與客戶的連接,而其他的子進程再次進入睡眠。由上面的討論,可以了解主守護進程的實現(xiàn)過程如圖5-2所示:圖5-2主守護進程實現(xiàn)過程因為一個請求的到來喚醒了所有的子進程,而最后只有一個子進程被調(diào)用,這種現(xiàn)象叫做驚群現(xiàn)象(thunderingherd),雖然這樣工作可行,但對系統(tǒng)系能的影響是顯著的。由于同時醒來的進程過多,內(nèi)核在進程調(diào)度上會花費更多的時間。解決的辦法是在調(diào)用accept前后設置某種形式的鎖,如信號量鎖或文件鎖,這樣只有一個accept阻塞在套接字描述符上了。對進程池中進程的數(shù)量也需要管理,如果進程池中空閑進程太多,則浪費系統(tǒng)資源;空閑進程太少,就會因為客戶連接的突發(fā)增加而使池中的子進程耗盡需要創(chuàng)建子進程,從而影響響應速度。主守護進程除了負責創(chuàng)建進程池,還負責對進程池的管理。它定時檢查進程池中空閑進程數(shù),當空閑進程數(shù)低于某一閾值時,則派生額外的子進程;當空閑進程數(shù)大于某一閾值時,則終止部分派生的子進程。代理服務器提供的代理服務有:HTTP、SMTP、FTP、TELNET、POP3等代理服務。代理模塊的實現(xiàn)在整個代理服務器的實現(xiàn)中占的比重最大,在實現(xiàn)的難度上也是最難的。雖然要提供的代理服務種類眾多,針對RFC協(xié)議也各式各樣,但是代理服務器包含的各各部分邏輯上都是相互獨立,數(shù)據(jù)處理都依賴各自的具體協(xié)議。代理服務器在設計上采用了進程池的思想,每一個進程池在實現(xiàn)上均需要提供一個管理進程,管理進程負責管理進程池的開啟[4]。管理系統(tǒng)管理進程池的基本實現(xiàn)過程如下:代理服務初始化;建立與監(jiān)控進程的通信通道;啟動池管理;進入循環(huán)體;讀取來自監(jiān)控進程的命令;讀取進程池管理配置信息。在啟動了進程池后,由進程池中的某一個進程承擔具體的代理服務。進程池中承擔代理服務的進程,一方面與進程管理器建立聯(lián)系,同時與進程池中的其他進程保持進程間的同步,最后完成一般的代理服務功能?;具^程如下:1.建立與管理進程的通信通道;2.向管理進程報告進程的運行情況;3.讀取管理進程的指令;4.建立套接字,接受客戶端的連接;5.利用雙態(tài)信號量實現(xiàn)互斥功能,保持進程間的同步。代理服務器對客戶請求的解析處理,采用流程圖的形式表示,如圖5-3所示:圖5-3客戶請求解析流程圖由于訪問的網(wǎng)頁都是動態(tài)的,也就是說每次用戶訪問一個界面,服務器要執(zhí)行數(shù)據(jù)庫查詢,啟動模板,執(zhí)行業(yè)務邏輯以及最終生成一個你所看到的網(wǎng)頁,這一切都是動態(tài)即使生成的的。從處理器資源的角度來看,這是比較昂貴的。為了盡可能地解決過載問題時,就要用到緩存了。緩存的目的是為了避免重復計算,特別是對一些比較耗時間、資源的計算。緩存系統(tǒng)需要一些少量的設定工作。也就是說你必須告訴它緩存的數(shù)據(jù)應該放在哪里,在數(shù)據(jù)庫中、在文件系統(tǒng)、或者直接在內(nèi)存中。代理服務器的緩存技術(shù),可以把最近的一些請求和響應暫存在本地磁盤中,用一個文檔存放計算機緩存經(jīng)常訪問的站點。當內(nèi)部網(wǎng)絡用戶經(jīng)過代理服務器訪問Internet時,若代理服務器發(fā)現(xiàn)這個請求與暫時存放的請求相同,就返回暫存的響應,而不需要按URL的地址再次去因特網(wǎng)訪問資源[5]。這樣,可以減少內(nèi)部網(wǎng)絡計算機訪問Internet的時間和流量。如果在緩存目錄中沒有其所訪問的主頁,則代理服務器緩存文件將用戶的請求轉(zhuǎn)發(fā)給Internet,再將其所訪問的主頁傳給訪問用戶。代理服務器緩存管理模塊的工作流程圖,如圖5-4所示:圖5-4緩存管理模塊的工作流程圖圖中數(shù)字含義為:1.表示代理服務器將客戶端的請求直接轉(zhuǎn)發(fā)到遠程服務器。2.表示代理服務器將遠程服務器的響應直接轉(zhuǎn)發(fā)給客戶端。3.表示代理服務器按照客戶端的請求,查找緩存。4.表示緩存中如果有客戶端請求所需的數(shù)據(jù),代理服務器將緩存中的相關(guān)數(shù)據(jù)轉(zhuǎn)發(fā)給客戶端。5.表示遠程服務器返回的數(shù)據(jù),經(jīng)過代理服務器的判斷,如果是可以緩存的,則存入緩存。5.3系統(tǒng)實現(xiàn)此代理服務器系統(tǒng)將是建立在Windows平臺上的網(wǎng)絡應用程序設計。由于需要服務器為其他許多稱為客戶的主機提供服務,而客戶機又可以隨時打開和關(guān)閉,在選擇網(wǎng)絡應用程序體系結(jié)構(gòu)時就采用支持這種特點的客戶機/服務器結(jié)構(gòu)。還將運用Windows下網(wǎng)絡編程的標準接口WinSock,因為它允許兩個或多個應用程序在相同機器上,或者是通過網(wǎng)絡相互交流,它是真正協(xié)議無關(guān)的接口。為了便于直接使用Windows提供的網(wǎng)絡編程接口,利用MFC類庫中提供的兩個Socket類CAsyncSocket和Csocket[6]。使用這兩個Socket類,我們可以運用面向?qū)ο蟮姆椒▉磉M行Socket編程,而且它們還分別在較低和較高層次上封裝了WindowsSocketAPI,為程序員Socket程序提供了便利。代理服務器的功能要實現(xiàn),對于任何一個連接請求,服務器都能夠?qū)ζ溥M行響應,啟動服務器后,其相應過程可以分三個步驟完成。第一步,創(chuàng)建線程用于監(jiān)聽用戶連接,由于該代理服務器是基于面向連接的TCP協(xié)議,通過對JAVA提供的流Socket類實現(xiàn)。因此,用戶再請求服務連接之前,必須建立與服務器之間的連接。第二步:接收用戶請求,并向目的Web服務器轉(zhuǎn)發(fā)用戶請求。第三步:接收從服務器上獲取的數(shù)據(jù),并向用戶瀏覽器轉(zhuǎn)發(fā),同一時間中,數(shù)據(jù)接收線程和數(shù)據(jù)發(fā)送線程同時工作,并且通過共享緩沖進行同步和協(xié)調(diào)工作。主守護進程負責代理服務器的初始化、監(jiān)聽端口、啟動一定數(shù)量的代理服務子進程并對進程池進行管理,實現(xiàn)流程如下:(1)首先將進程初始化為守護進程,守護進程的特點是在后臺運行,沒有與之相關(guān)聯(lián)的終端;(2)建立Socket套接字,綁定IP地址和端口,并監(jiān)聽代理服務端口;(3)建立共享內(nèi)存和文件鎖,申請一塊共享文件,大小為最大進程數(shù),每個字節(jié)代表相應進程的狀態(tài),將共享內(nèi)存中每個狀態(tài)初始化為EMPTY;(4)啟動進程池,啟動一定數(shù)量的子進程,并在共享內(nèi)存中對應位置存入IDLE狀態(tài);(5)定時檢查進程池中空閑進程數(shù),當空閑進程數(shù)低于某一閾值時,則派生額外的子進程;當空閑進程數(shù)大于某一閾值時,則終止派生的子進程。主守護進程與進程池的通訊可采用共享內(nèi)存方式。在共享內(nèi)存中存入一個數(shù)組,數(shù)組的每一項對應進程池中一個子進程,記錄該子進程的狀態(tài)。每個子進程有3個狀態(tài)(EMPTY、IDL、BUSY)。EMPTY表示該位的子進程沒有創(chuàng)建,IDL表示該為的子進程處于空閑,BUSY表示該位的子進程正在處理客戶請求。進程池中的子進程向共享內(nèi)存?zhèn)鬟f自己的狀態(tài)信息(EMPTY、IDL、BUSY),主守護進程便可通過共享內(nèi)存檢測到各個進程的狀態(tài)。對共享內(nèi)存的操作要加鎖(可采用文件鎖)。另外,在處理客戶請求過程中涉及到許多內(nèi)存申請釋放操作。為避免內(nèi)存泄露問題,子進程每處理一定數(shù)量的連接,就自殺掉。在設計上采用了進程池的思想,所以在實現(xiàn)上也按照進程池的設計進行。每一個進程池在實現(xiàn)上均需要提供一個管理進程,管理進程負責管理進程池的啟動和監(jiān)視進程建立關(guān)系,從進程池中取出一個進程提供代理服務。代理服務模塊負責處理客戶端的請求,提供代理服務。每個代理服務子進程的流程如下:(1)初始化連接數(shù)為0;(2)進入循環(huán)體;(3)調(diào)用accept()接收連接,要對系統(tǒng)調(diào)用accept()加鎖,解決驚群問題;(4)向共享內(nèi)存對用位置傳遞BUSY狀態(tài);(5)讀取客戶請求,解析請求并進行相應處理;(6)將連接數(shù)遞增,檢查處理的連接數(shù)是否到達最大數(shù)。如果已經(jīng)達到,則向共享內(nèi)存對應位置傳遞EMPTY狀態(tài)并推出程序;否則向共享內(nèi)存對應位置傳遞IDLE狀態(tài),再進入步驟(3)。代理服務子進程在接收到客戶的請求后,首先判斷該請求是否可從緩存讀取,判斷的根據(jù)是如果請求的類型是GET,且請求頭中不含用來表示不可緩存的Cache-Control:no-cache或pragma:no-cache字段,則可以從緩存讀??;否則直接連接遠端服務器,獲取響應后直接轉(zhuǎn)發(fā)給客戶端。如果可以從緩存讀取,則開始查詢緩存文件。根據(jù)查詢結(jié)果做不同的處理。查詢結(jié)果分為兩種情況。一種情況是查到該緩存文件且文件沒有過期,此時判斷客戶的請求是否是條件請求,即客戶端詢問客戶機器上保存的文件是否已經(jīng)修改,如果是條件請求,則判斷文件的有效性,如果有效,則返回給客戶端304響應,告訴客戶端客戶機器上保護文件依舊有效;若無效則讀取緩存文件返回給客戶;如果客戶請求不是條件請求,則可以直接讀取緩存文件返回給客戶端。另一種情況是沒有查到該緩存文件或查到的緩存文件已經(jīng)過期,此時也要判斷是否是條件請求,如果是條件請求,則連接遠程端服務器,轉(zhuǎn)發(fā)該請求,獲取響應后,判斷該響應是否是已更新的網(wǎng)頁,如果是,則判斷該網(wǎng)頁是否可以緩存(判斷依據(jù)是,如果響應為200,且請求頭中不包含用來表示不可緩存的Cache-Control:no-cache或pragma:no-cache字段,則可以緩存,否則不可以),可以緩存則更新緩存并將結(jié)果返回給客戶端,不可以緩存則直接將結(jié)果返回給客戶端;如果獲得的響應是其他結(jié)果則直接轉(zhuǎn)發(fā)給客戶端。如果請求不是條件請求,則連接遠程客戶端,轉(zhuǎn)發(fā)請求獲取響應,再根據(jù)響應結(jié)果判斷是否可以緩存,可以緩存則更新緩存并將結(jié)果返回給客戶端;不可以緩存則直接將結(jié)果返回給客戶端。緩存管理模塊負責對緩存的快速查詢、添加和刪除等維護操作。工作流程如下:(1)建立HASH數(shù)組和時間鏈表并初始化;(2)進入循環(huán)體;(3)阻塞式讀取消息隊列中的消息;(4)根據(jù)消息類型做相應處理,如果是查詢消息,則查詢HASH表,返回匹配的結(jié)點給相應的代理服務子進程;如果是更新消息,則建立新的結(jié)點,插入HASH表,同時也插入時間鏈表的頭部;(5)計算緩存區(qū)已經(jīng)使用的大小,如果超過一定的閾值,則通過時間鏈表中刪除過期文件和最久未使用的文件及相應于時間鏈表上的結(jié)點結(jié)構(gòu),直至滿足緩沖區(qū)大小的要求,回到步驟(3)。緩存是代理服務器用于保存遠端服務器的網(wǎng)頁,以便客戶端能夠直接從緩存讀取,加快響應速度。如果緩存中的網(wǎng)頁過期或不存在,則由代理服務器重新下載,在轉(zhuǎn)發(fā)給客戶端。采用緩存機制能夠有效地降低Internet的信息流量,提高用戶的訪問速率。緩存中的網(wǎng)頁是以文件的形式存儲的,首先定義了一個數(shù)據(jù)結(jié)構(gòu)記錄每個文件的信息,該實現(xiàn)過程為:首先要聲明換緩存的類名,聲明緩存池,記錄緩存的位置構(gòu)造器,以及緩存方法。當傳進要使用的實例名時,由該方法去判斷緩存池中是否存在,遍歷緩存池,若存在,則返回。如果緩存池滿,則采取先進先出的原則。即當緩存的剩余空間小于一定閾值時,要替換掉一部分最近一直沒有被訪問的文件。

第6章系統(tǒng)測試6.1系統(tǒng)測試概述系統(tǒng)測試,是將通過集成測試的軟件,作為整體基于計算機系統(tǒng)的一個元素、與計算機硬件、外設某些支持軟件、數(shù)據(jù)、人員等其他系統(tǒng)元素結(jié)合在一起,對計算機系統(tǒng)進行全面的功能覆蓋。簡單的說,基于一個完全能運行的軟件系統(tǒng)版本的測試可以稱為系統(tǒng)測試。測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。好的測試方案是能夠發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的測試方案。成功的測試是為發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯誤的測試??傊?,測試的目的就是希望能以最少的人力和時間發(fā)現(xiàn)潛在的各種錯誤和缺陷。從上述的目標可以歸納出測試的定義是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。測試的原則:1.應盡早并不斷地進行測試。2.測試工作應避免開發(fā)軟件的人或小組來承擔(單元測試除外)。3.在設計測試方案時不僅要確定輸入數(shù)據(jù),而且還要根據(jù)系統(tǒng)的功能確定輸出結(jié)果。4.在設計測試用例時,不僅要包括合理、有效的輸入條件,也要包含不合理、失效的輸入條件。5.在測試程序時,不僅要檢測程序是否做了該做的事,還要檢測程序是否做了不應該的事。6.充分重視測試中的集群現(xiàn)象。7.嚴格按照測試計劃來進行,避免測試的隨意性。8.妥善保管測試計劃、測試用例,作為軟件文檔組成部分,為維護提供方便。6.2代理服務器系統(tǒng)的測試HTTP客戶可以發(fā)起兩種方式的HTTP請求:一是不帶HTTP選項的GET請求,代理服務器可以從緩存取網(wǎng)頁返回;二是帶“Pragmatic:nocache”的GET請求,代理服務器必須從源服務器取回網(wǎng)頁再返回,而不是從本地緩存取回,但取回的網(wǎng)頁根據(jù)響應的類型

溫馨提示

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

評論

0/150

提交評論