




已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
UNIX網(wǎng)絡(luò)的服務(wù)器程序設(shè)計(jì)方法(劉凱 劉春旭,四川大學(xué)計(jì)算機(jī)學(xué)院)摘要:介紹了幾種網(wǎng)絡(luò)操作模式和UNIX下基于TCP/IP協(xié)議的網(wǎng)絡(luò)客戶/服務(wù)器模式的程序架構(gòu)。重點(diǎn)對(duì)客戶/服務(wù)器模式中服務(wù)器程序的幾種設(shè)計(jì)方法進(jìn)行了討論。關(guān)鍵詞:客戶/服務(wù)器,Socket,進(jìn)程,并發(fā)服務(wù)器1引言11幾種網(wǎng)絡(luò)模式的介紹對(duì)等網(wǎng)絡(luò)(PeertoPeer)模式不需要專用服務(wù)器,每一臺(tái)工作站都能充當(dāng)網(wǎng)絡(luò)服務(wù)的請(qǐng)求者和提供者,都有絕對(duì)自主權(quán),也可以互相交換文件。這種類型的網(wǎng)絡(luò)軟件被設(shè)計(jì)成每一個(gè)實(shí)體都能完成相同或相似的功能。服務(wù)器(ServerBased)模式以服務(wù)器為中心,嚴(yán)格地定義了每一個(gè)實(shí)體的工作角色,即網(wǎng)絡(luò)上的工作站無法在彼此間直接進(jìn)行文件傳輸,需通過服務(wù)器作為媒介,所有的文件讀取,消息傳送等也都在服務(wù)器的掌握之中??蛻?服務(wù)器(Client/Server)模式(有時(shí)也稱為主從式Master/Slave)指將需要處理的工作分配給客戶端和服務(wù)器端處理,所謂的客戶和服務(wù)器并沒有一定的界限,這取決于運(yùn)行什么軟件,簡(jiǎn)單的講,客戶是提出服務(wù)請(qǐng)求的一方,而服務(wù)器是提供服務(wù)的一方。在客戶/服務(wù)器模式中服務(wù)器端所提供的功能不僅僅是文件、數(shù)據(jù)庫(kù)等服務(wù),還應(yīng)當(dāng)有相應(yīng)的計(jì)算、通信等能力也就是說在工作時(shí)由客戶端和服務(wù)器端各自負(fù)擔(dān)一部分計(jì)算或通信的功能??蛻?服務(wù)器模式已經(jīng)成為計(jì)算機(jī)網(wǎng)絡(luò)互連中最重要的應(yīng)用技術(shù)之一,它把一個(gè)大型的計(jì)算機(jī)應(yīng)用系統(tǒng)變?yōu)槎鄠€(gè)能互為獨(dú)立的子系統(tǒng),而服務(wù)器便是整個(gè)應(yīng)用系統(tǒng)資源的存儲(chǔ)與管理中心,多臺(tái)客戶機(jī)則各自處理相應(yīng)的功能,共同實(shí)現(xiàn)完整的應(yīng)用。瀏覽器/服務(wù)器(Browser/Server)模式從本質(zhì)上將,仍然是客戶/服務(wù)器模式(是客戶/服務(wù)器模式的特例)。只不過在某些應(yīng)用方面,如數(shù)據(jù)庫(kù)服務(wù),它將傳統(tǒng)的二層客戶/服務(wù)器結(jié)構(gòu)發(fā)展成三層的客戶/服務(wù)器結(jié)構(gòu)并在Internet上應(yīng)用而已。在上述幾種模式中,客戶/服務(wù)器模式具有靈活多變的體系結(jié)構(gòu)、豐富的開發(fā)環(huán)境和強(qiáng)大的設(shè)備驅(qū)動(dòng)能力。12本文所采用的網(wǎng)絡(luò)應(yīng)用程序編程接口網(wǎng)絡(luò)程序之間進(jìn)行通訊,必須建立在一定的通訊協(xié)議基礎(chǔ)之上。對(duì)于UNIX下的應(yīng)用程序,可用的協(xié)議有TCP/IP的傳輸控制協(xié)議TCP(Transmission Control Protocol)和用戶數(shù)據(jù)報(bào)協(xié)議UDP(User Datagram Protocol),XNS(Xerox Network System)的定序分組協(xié)議SPP(Sequential Pocket Protocol)和網(wǎng)際數(shù)據(jù)報(bào)協(xié)議IDP(Internetwork Datagram Protocol)以及ARPANET的接口報(bào)文處理機(jī)鏈路IMPLINK(Interface Message Processor Link)等。因?yàn)镮nternet的普及,使得TCP/IP成為使用最廣泛的協(xié)議。UNIX下基于TCP/IP協(xié)議的網(wǎng)絡(luò)應(yīng)用程序編程接口API(Application Programming Interface)有兩種:源自BSD UNIX的Socket API和AT&T的傳輸層接口TLI(Transport Layer Interface)的超集X/Open傳輸接口XTI(X/Open Transport Interface)。這兩種API都是面向客戶/服務(wù)器模式的。由于Socket API已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn),因此本文在介紹服務(wù)器端程序的設(shè)計(jì)方法時(shí)也采用Socket API。2客戶/服務(wù)器模式的Socket實(shí)現(xiàn)框架21 TCP/IP Socket的基本原理。TCP/IP對(duì)外提供的只是編程接口而非用戶服務(wù),真正的用戶服務(wù)還得靠編寫相應(yīng)的服務(wù)程序來實(shí)現(xiàn)。TCP/IP的Socket API編程接口構(gòu)成了使用協(xié)議的網(wǎng)絡(luò)應(yīng)用程序視圖。服務(wù)程序客戶程序Socket APITCP/IP協(xié)議物理介質(zhì)圖1網(wǎng)絡(luò)應(yīng)用程序、Socket API和TCP/IP的關(guān)系Socket API在BSD UNIX中首次提出,其目的是為了解決網(wǎng)絡(luò)間程序通訊的問題。就其原理而言,面向連接的Socket類似于電話系統(tǒng),無連接的Socket類似于電報(bào)系統(tǒng)。Socket實(shí)質(zhì)上是為網(wǎng)絡(luò)程序提供了通訊的端點(diǎn)號(hào)。對(duì)于每個(gè)網(wǎng)絡(luò)程序的一個(gè)Socket,它首先有一個(gè)半相關(guān)的端點(diǎn)號(hào)的描述:協(xié)議,本地地址,本地端口,如果它是與另一個(gè)Socket連接了的,則有一個(gè)相關(guān)的端點(diǎn)描述:協(xié)議,本地地址,本地端口,遠(yuǎn)程地址,遠(yuǎn)程端口。每個(gè)Socket有一個(gè)本地唯一的由操作系統(tǒng)分配的編號(hào)。22 Socket 的系統(tǒng)調(diào)用Socket是面向客戶/服務(wù)器模式設(shè)計(jì)的,它針對(duì)客戶和服務(wù)器程序提供了不同的系統(tǒng)調(diào)用。同時(shí)它還分為面向連接和無連接兩種類型。下表列出了Socket API的基本函數(shù)(這里就不對(duì)調(diào)用參數(shù)進(jìn)行說明了)。 表1 基本的Socket系統(tǒng)調(diào)用函數(shù)名用途使用者相關(guān)協(xié)議說明socket建立一個(gè)通訊端點(diǎn)客戶、服務(wù)器TCP、UDPbind為一個(gè)連接的本地socket賦名客戶、服務(wù)器TCP、UDP使用TCP時(shí),使用者為服務(wù)器;使用UDP時(shí),使用者為客戶listen監(jiān)聽socket上的連接服務(wù)器TCPaccept接受socket上的連接服務(wù)器TCPconnect對(duì)socket進(jìn)行連接初始化客戶TCPread從socket接收信息客戶、服務(wù)器TCPwrite向socket發(fā)送信息客戶、服務(wù)器TCPrecvfrom從socket接收信息客戶、服務(wù)器UDPsendto向socket發(fā)送信息客戶、服務(wù)器UDPclose關(guān)閉socket客戶、服務(wù)器TCP、UDP23面向連接和無連接的客戶/服務(wù)器模式的程序流程框架圖服務(wù)器socket ( )服務(wù)響應(yīng)服務(wù)請(qǐng)求建立連接處理服務(wù)請(qǐng)求bind ( )listen ( )accept ( )阻塞并等待客戶的連接請(qǐng)求read ( )write ( )客戶socket ( )connect ( )write ( )read ( )圖2 面向連接的客戶/服務(wù)器模式服務(wù)器服務(wù)響應(yīng)服務(wù)請(qǐng)求bind()recvfrom()阻塞并等待客戶數(shù)據(jù)處理服務(wù)請(qǐng)求sendto()socket()客戶recvfrom()sendto()bind()socket()圖3 無連接的客戶/服務(wù)器模式3服務(wù)器程序的設(shè)計(jì)方法31總述客戶程序一般比較簡(jiǎn)單,而服務(wù)器程序就比較復(fù)雜了,因?yàn)閷?duì)服務(wù)器程序的設(shè)計(jì),必須考慮到其響應(yīng)速度和響應(yīng)能力等服務(wù)性能因數(shù)。本文主要討論的是面向連接的服務(wù)器程序設(shè)計(jì)方法。總體上服務(wù)器程序可分為兩類:并發(fā)服務(wù)器(Concurrent Server)和串行服務(wù)器(Iterative Server)。前者主要針對(duì)實(shí)時(shí)性的客戶/服務(wù)器模式,后者主要針對(duì)服務(wù)量小的客戶/服務(wù)器模式。32 TCP串行服務(wù)器程序串行服務(wù)器程序是這樣的:每次它只能為一個(gè)連接過來的客戶程序提供服務(wù),只有在完全處理了一個(gè)客戶的請(qǐng)求后,才能響應(yīng)下一個(gè)客戶的請(qǐng)求,即按照FIFO的原則響應(yīng)請(qǐng)求。一般很少使用串行服務(wù)器程序,不過諸如時(shí)間/日期等服務(wù)量小的且實(shí)時(shí)性要求不高的服務(wù)器程序可以使用該方式。從進(jìn)程控制的角度來講,該方式的速度是最快的,因?yàn)樗贿M(jìn)行進(jìn)程控制,系統(tǒng)開銷小。33 傳統(tǒng)的TCP進(jìn)程并發(fā)服務(wù)器程序在這種方式下,并發(fā)服務(wù)器程序在收到客戶程序請(qǐng)求后,派生出一個(gè)子進(jìn)程來為該客戶程序服務(wù),自己則回到等待狀態(tài),準(zhǔn)備接收下一個(gè)客戶程序的請(qǐng)求,子進(jìn)程在服務(wù)完成后退出。其中,作為父進(jìn)程的并發(fā)服務(wù)器程序成為主服務(wù)器(master),具體處理客戶請(qǐng)求的子進(jìn)程成為從服務(wù)器(slave)。響應(yīng)子進(jìn)程接管連接客戶程序slave服務(wù)請(qǐng)求父進(jìn)程返回生成子進(jìn)程fork()連接connect()處理請(qǐng)求master接受客戶請(qǐng)求accecp()圖4 傳統(tǒng)的TCP進(jìn)程并發(fā)服務(wù)器程序框架并發(fā)服務(wù)器的問題在于派生子進(jìn)程(fork()操作)時(shí)會(huì)消耗CPU的很多時(shí)間,這對(duì)需要響應(yīng)數(shù)目眾多的客戶進(jìn)程的服務(wù)器進(jìn)程所在的系統(tǒng)是極為不利的,例如對(duì)于Web服務(wù)器就是這樣。34 TCP預(yù)先派生子進(jìn)程并發(fā)服務(wù)器程序在傳統(tǒng)的TCP進(jìn)程并發(fā)服務(wù)器程序的基礎(chǔ)上,可以對(duì)響應(yīng)方式進(jìn)行一些改造。傳統(tǒng)的TCP進(jìn)程并發(fā)服務(wù)器程序的響應(yīng)方式是即響應(yīng)即派生子進(jìn)程。現(xiàn)在將這種方式改變?yōu)椋悍?wù)器程序啟動(dòng)后就先生成若干子進(jìn)程以備響應(yīng),這些子進(jìn)程構(gòu)成服務(wù)子進(jìn)程組,而父進(jìn)程則成了監(jiān)控進(jìn)程。fork可用子進(jìn)程組父進(jìn)程子進(jìn)程1子進(jìn)程2子進(jìn)程3客戶2客戶1子進(jìn)程N(yùn)圖5 TCP預(yù)先派生子進(jìn)程這里需要解決的問題是:怎樣保持一定量的可用子進(jìn)程;服務(wù)請(qǐng)求到達(dá)時(shí),喚醒子進(jìn)程的機(jī)制應(yīng)該怎樣以及父進(jìn)程怎樣將必要的信息傳遞給子進(jìn)程。父進(jìn)程監(jiān)視可用子進(jìn)程的數(shù)量,當(dāng)數(shù)量低于某個(gè)閾值時(shí)就再派生一些子進(jìn)程,當(dāng)數(shù)量高于某個(gè)閾值時(shí)就終止一些可用子進(jìn)程。當(dāng)然,總的子進(jìn)程數(shù)量也應(yīng)當(dāng)有個(gè)上限值,以防止系統(tǒng)資源消耗完。這樣就使得可用子進(jìn)程數(shù)及總的子進(jìn)程數(shù)保持在一定范圍之內(nèi)了。預(yù)先生成得子進(jìn)程在各自調(diào)用accept()后進(jìn)入睡眠狀態(tài)。由于這些子進(jìn)程共用一個(gè)socket結(jié)構(gòu),當(dāng)一個(gè)可戶請(qǐng)求到達(dá)時(shí),就會(huì)造成驚群(thundering herd)喚醒所有的子進(jìn)程。當(dāng)然,只有最先被調(diào)度的子進(jìn)程才會(huì)獲得客戶的連接,其他的子進(jìn)程會(huì)再次進(jìn)入睡眠狀態(tài)。這種情況會(huì)導(dǎo)致系統(tǒng)性能的下降。解決這個(gè)問題的方法是給accept上鎖,即保證accept操作的原子性。有些UNIX系統(tǒng)在內(nèi)核已經(jīng)解決了這一問題,就無須再給accept上鎖了。如果子進(jìn)程只是父進(jìn)程的副本,基本上就不用額外考慮進(jìn)程通訊的問題了。如果將父進(jìn)程改造成類似于inetd的守護(hù)進(jìn)程(啟動(dòng)后先調(diào)用fork()生成子進(jìn)程,再通過exec系統(tǒng)調(diào)用執(zhí)行服務(wù)處理程序),就必須解決父進(jìn)程同子進(jìn)程之間的通訊問題。UNIX下進(jìn)程通訊的機(jī)制有多種,如管道(pipe),具名管道(named pipe),IPC消息(InterProcess Communication Message)等。這里我們使用IPC消息隊(duì)列來向子進(jìn)程傳遞socket描述字。消息隊(duì)列客戶1客戶2父進(jìn)程子進(jìn)程1子進(jìn)程2子進(jìn)程3可用子進(jìn)程組子進(jìn)程N(yùn)圖6 使用IPC消息機(jī)制的TCP預(yù)先派生子進(jìn)程方法35 TCP線程并發(fā)服務(wù)器程序線程的執(zhí)行效率比進(jìn)程高10到100倍。編寫線程函數(shù)時(shí)必須注意函數(shù)的線程安全性。并非所有的UNIX系統(tǒng)或同種UNIX的不同版本都支持線程。由于在方法上線程服務(wù)器程序同進(jìn)程服務(wù)器程序的設(shè)計(jì)差不多,這里就不作多的描述了。4結(jié)束語編程人員在編寫具體的服務(wù)器程序時(shí),應(yīng)當(dāng)結(jié)合具體的應(yīng)用、網(wǎng)絡(luò)結(jié)構(gòu)和網(wǎng)絡(luò)性能等情況,盡可能地提高服務(wù)效率和網(wǎng)絡(luò)安全性。參考文獻(xiàn)1網(wǎng)絡(luò)操作系統(tǒng)的分類lease.qz.f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大偵探考試題及答案
- 人員老化面試題及答案
- 村衛(wèi)生室清洗消毒培訓(xùn)
- 員工安全培訓(xùn)課
- 2025年農(nóng)村一二三產(chǎn)業(yè)融合與農(nóng)村信息化建設(shè)與農(nóng)村社會(huì)治理案例報(bào)告
- 養(yǎng)老機(jī)構(gòu)2025:老年健康管理中的長(zhǎng)期照護(hù)服務(wù)模式創(chuàng)新與養(yǎng)老服務(wù)模式優(yōu)化001
- 河南省鄭州市航空港區(qū) 2024-2025學(xué)年七年級(jí)下學(xué)期期末調(diào)研道德與法治試卷(含答案)
- 異常分娩婦女的護(hù)理之胎兒因素
- 江蘇蘇州工業(yè)園區(qū)蓮花學(xué)校2024-2025學(xué)年七年級(jí)下學(xué)期期末測(cè)試歷史卷(含答案)
- 2025年跨文化交流能力在跨文化教育培訓(xùn)產(chǎn)品中的應(yīng)用報(bào)告
- GB/T 23806-2009精細(xì)陶瓷斷裂韌性試驗(yàn)方法單邊預(yù)裂紋梁(SEPB)法
- 綠殼蛋雞的養(yǎng)殖課件
- 小學(xué)語文擴(kuò)句、縮句專題
- 農(nóng)村公路安全生命防護(hù)工程施工方案
- (部編版)統(tǒng)編版小學(xué)語文教材目錄(一至六年級(jí)上冊(cè)下冊(cè)齊全)
- 抗滑樁專項(xiàng)的施工組織方案[專家評(píng)審]
- 常用彈簧鋼號(hào)對(duì)照表
- 應(yīng)用回歸分析(第三版)何曉群_劉文卿_課后習(xí)題答案_完整版
- 小學(xué)二年級(jí)下冊(cè)勞動(dòng)教案
- 食品安全及衛(wèi)生保證措施
- 60m3臥式液化石油氣儲(chǔ)罐設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論