UNIX網(wǎng)絡(luò)的服務(wù)器程序設(shè)計方法_第1頁
UNIX網(wǎng)絡(luò)的服務(wù)器程序設(shè)計方法_第2頁
UNIX網(wǎng)絡(luò)的服務(wù)器程序設(shè)計方法_第3頁
UNIX網(wǎng)絡(luò)的服務(wù)器程序設(shè)計方法_第4頁
UNIX網(wǎng)絡(luò)的服務(wù)器程序設(shè)計方法_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、UNIX網(wǎng)絡(luò)的服務(wù)器程序設(shè)計方法(劉凱劉春旭,四川大學(xué)計算機學(xué)院)摘要:介紹了幾種網(wǎng)絡(luò)操作模式和UNIX下基于TCP/IP協(xié)議的網(wǎng)絡(luò)客戶/服務(wù)器模式的程序架構(gòu)。重點對客戶/服務(wù)器模式中服務(wù)器程序的幾種設(shè)計方法進行了討論。關(guān)鍵詞:客戶/服務(wù)器,Socket,進程,并發(fā)服務(wù)器1引言11幾種網(wǎng)絡(luò)模式的介紹對等網(wǎng)絡(luò)(Peer-to-Peer)模式不需要專用服務(wù)器,每一臺工作站都能充當(dāng)網(wǎng)絡(luò)服務(wù)的請求者和提供者,都有絕對自主權(quán),也可以互相交換文件。這種類型的網(wǎng)絡(luò)軟件被設(shè)計成每一個實體都能完成相同或相似的功能。服務(wù)器(ServerBased)模式以服務(wù)器為中心,嚴(yán)格地定義了每一個實體的工作角色,即網(wǎng)絡(luò)上的工

2、作站無法在彼此間直接進行文件傳輸,需通過服務(wù)器作為媒介,所有的文件讀取,消息傳送等也都在服務(wù)器的掌握之中??蛻?服務(wù)器(Client/Server)模式(有時也稱為主從式Master/Slave)指將需要處理的工作分配給客戶端和服務(wù)器端處理,所謂的客戶和服務(wù)器并沒有一定的界限,這取決于運行什么軟件,簡單的講,客戶是提出服務(wù)請求的一方,而服務(wù)器是提供服務(wù)的一方。在客戶/服務(wù)器模式中服務(wù)器端所提供的功能不僅僅是文件、數(shù)據(jù)庫等服務(wù),還應(yīng)當(dāng)有相應(yīng)的計算、通信等能力也就是說在工作時由客戶端和服務(wù)器端各自負擔(dān)一部分計算或通信的功能。客戶/服務(wù)器模式已經(jīng)成為計算機網(wǎng)絡(luò)互連中最重要的應(yīng)用技術(shù)之一,它把一個大型

3、的計算機應(yīng)用系統(tǒng)變?yōu)槎鄠€能互為獨立的子系統(tǒng),而服務(wù)器便是整個應(yīng)用系統(tǒng)資源的存儲與管理中心,多臺客戶機則各自處理相應(yīng)的功能,共同實現(xiàn)完整的應(yīng)用。瀏覽器/服務(wù)器(Browser/Server)模式從本質(zhì)上將,仍然是客戶/服務(wù)器模式(是客戶/服務(wù)器模式的特例)。只不過在某些應(yīng)用方面,如數(shù)據(jù)庫服務(wù),它將傳統(tǒng)的二層客戶/服務(wù)器結(jié)構(gòu)發(fā)展成三層的客戶/服務(wù)器結(jié)構(gòu)并在Internet上應(yīng)用而已。在上述幾種模式中,客戶/服務(wù)器模式具有靈活多變的體系結(jié)構(gòu)、豐富的開發(fā)環(huán)境和強大的設(shè)備驅(qū)動能力。1 2本文所采用的網(wǎng)絡(luò)應(yīng)用程序編程接口網(wǎng)絡(luò)程序之間進行通訊,必須建立在一定的通訊協(xié)議基礎(chǔ)之上。對于UNIX下的應(yīng)用程序,可用

4、的協(xié)議有TCP/IP的傳輸控制協(xié)議TCP(TransmissionControlProtocol)和用戶數(shù)據(jù)報協(xié)議UDP(UserDatagramProtocol),XNS(XeroxNetworkSystem)的定序分組協(xié)議SP(PSequentialPocketProtocol)和網(wǎng)際數(shù)據(jù)報協(xié)議IDP(InternetworkDatagramProtocol)以及ARPANE的接口報文處理機鏈路IMPLINK(InterfaceMessageProcessorLink)等。因為Internet的普及,使得TCP/IP成為使用最廣泛的協(xié)議。UNIX下基于TCP/IP協(xié)議的網(wǎng)絡(luò)應(yīng)用程序編程接口

5、API(ApplicationProgrammingInterface)有兩種:源自BSDUNIX勺SocketAPI和AT&T的傳輸層接口TLI(TransportLayerInterface)的超集X/Open傳輸接口XTI(X/OpenTransportInterface)。這兩種API都是面向客戶/服務(wù)器模式的。由于SocketAPI已經(jīng)成為事實上的標(biāo)準(zhǔn),因此本文在介紹服務(wù)器端程序的設(shè)計方法時也采用SocketAPI。2 .客戶/服務(wù)器模式的Socket實現(xiàn)框架2. 1TCP/IPSocket的基本原理。TCP/IP對外提供的只是編程接口而非用戶服務(wù),真正的用戶服務(wù)還得靠編寫相

6、應(yīng)的服務(wù)程序來實現(xiàn)。TCP/IP的SocketAPI編程接口構(gòu)成了使用協(xié)議的網(wǎng)絡(luò)應(yīng)用程序視圖。圖1網(wǎng)絡(luò)應(yīng)用程序、SocketAPI和TCP/IP的關(guān)系SocketAPI在BSDUNIX中首次提出,其目的是為了解決網(wǎng)絡(luò)間程序通訊的問題。就其原理而言,面向連接的Socket類似于電話系統(tǒng),無連接的Socket類似于電報系統(tǒng)。Socket實質(zhì)上是為網(wǎng)絡(luò)程序提供了通訊的端點號。對于每個網(wǎng)絡(luò)程序的一個Socket,它首先有一個半相關(guān)的端點號的描述:協(xié)議,本地地址,本地端口,如果它是與另一個Socket連接了的,則有一個相關(guān)的端點描述:協(xié)議,本地地址,本地端口,遠程地址,遠程端口。每個Socket有一個本

7、地唯一的由操作系統(tǒng)分配的編號。2 2Socket的系統(tǒng)調(diào)用Socket是面向客戶/服務(wù)器模式設(shè)計的,它針對客戶和服務(wù)器程序提供了不同的系統(tǒng)調(diào)用。同時它還分為面向連接和無連接兩種類型。下表列出了SocketAPI的基本函數(shù)(這里就不對調(diào)用參數(shù)進行說明了)。表1基本的Socket系統(tǒng)調(diào)用函數(shù)名用途使用者相關(guān)協(xié)議說明socket建立一個通訊端點客戶、服務(wù)器TCP、UDPbind為一個連接的本地socket賦名客戶、服務(wù)器TCP、UDP使用TCP時,使用者為服務(wù)器;使用UDP時,使用者為客戶listen監(jiān)聽socket上的連接服務(wù)器TCPaccept接受socket上的連接服務(wù)器TCPconnect對

8、socket進行連接初始化客戶TCPread從socket接收信息客戶、服務(wù)器TCPwrite向socket發(fā)送信息客戶、服務(wù)器TCPrecvfrom從socket接收信息客戶、服務(wù)器UDPsendto向socket發(fā)送信息客戶、服務(wù)器UDPclose關(guān)閉socket客戶、服務(wù)器TCP、UDPaccept()2.3面向連接和無連接的客戶/服務(wù)器模式的程序流程框架圖客戶圖2.面向連接的客戶/服務(wù)器模式服務(wù)器客戶socket:()圖3無連接的客戶/服務(wù)器模式3服務(wù)器程序的設(shè)計方法3 1總述客戶程序一般比較簡單,而服務(wù)器程序就比較復(fù)雜了,因為對服務(wù)器程序的設(shè)計,必須考慮到其響應(yīng)速度和響應(yīng)能力等服務(wù)性

9、能因數(shù)。本文主要討論的是面向連接的服務(wù)器程序設(shè)計方法。總體上服務(wù)器程序可分為兩類:并發(fā)服務(wù)器(ConcurrentServer)和串行服務(wù)器(IterativeServer)。前者主要針對實時性的客戶/服務(wù)器模式,后者主要針對服務(wù)量小的客戶/服務(wù)器模式。3. 2TCP串行服務(wù)器程序串行服務(wù)器程序是這樣的:每次它只能為一個連接過來的客戶程序提供服務(wù),只有在完全處理了一個客戶的請求后,才能響應(yīng)下一個客戶的請求,即按照FIFO的原則響應(yīng)請求。一般很少使用串行服務(wù)器程序,不過諸如時間/日期等服務(wù)量小的且實時性要求不高的服務(wù)器程序可以使用該方式。從進程控制的角度來講,該方式的速度是最快的,因為它不進行進

10、程控制,系統(tǒng)開銷小。3. 3傳統(tǒng)的TCPS程并發(fā)服務(wù)器程序客戶程序連接connect ()master接受客戶請求accecp ()在這種方式下,并發(fā)服務(wù)器程序在收到客戶程序請求后,派生出一個子進程來為該客戶程序服務(wù),自己則回到等待狀態(tài),準(zhǔn)備接收下一個客戶程序的請求,子進程在服務(wù)完成后退出。其中,作為父進程的并發(fā)服務(wù)器程序成為主服務(wù)器(master),具體處理客戶請求的子進程成為從服務(wù)器(slave)。服務(wù)請求響應(yīng)進程返圖4傳統(tǒng)的TCP®程并發(fā)服務(wù)器程序框架并發(fā)服務(wù)器的問題在于派生子進程(fork()操作)時會消耗CPU的很多時間,這對需要響應(yīng)數(shù)目眾多的客戶進程的服務(wù)器進程所在的系統(tǒng)

11、是極為不利的,例如對于Wet®務(wù)器就是這樣。3. 4TCP預(yù)先派生子進程并發(fā)服務(wù)器程序在傳統(tǒng)的TCP進程并發(fā)服務(wù)器程序的基礎(chǔ)上,可以對響應(yīng)方式進行一些改造。傳統(tǒng)的TCP®程并發(fā)服務(wù)器程序的響應(yīng)方式是即響應(yīng)即派生子進程?,F(xiàn)在將這種方式改變?yōu)椋悍?wù)器程序啟動后就先生成若干子進程以備響應(yīng),這些子進程構(gòu)成服務(wù)子進程組,而父進程則成了監(jiān)控進程。圖5TCP預(yù)先派生子進程這里需要解決的問題是:怎樣保持一定量的可用子進程;服務(wù)請求到達時,喚醒子進程的機制應(yīng)該怎樣以及父進程怎樣將必要的信息傳遞給子進程。父進程監(jiān)視可用子進程的數(shù)量,當(dāng)數(shù)量低于某個閾值時就再派生一些子進程,當(dāng)數(shù)量高于某個閾值時就

12、終止一些可用子進程。當(dāng)然,總的子進程數(shù)量也應(yīng)當(dāng)有個上限值,以防止系統(tǒng)資源消耗完。這樣就使得可用子進程數(shù)及總的子進程數(shù)保持在一定范圍之內(nèi)了。預(yù)先生成得子進程在各自調(diào)用accept()后進入睡眠狀態(tài)。由于這些子進程共用一個socket結(jié)構(gòu),當(dāng)一個可戶請求到達時,就會造成驚群(thunderingherd)喚醒所有的子進程。當(dāng)然,只有最先被調(diào)度的子進程才會獲得客戶的連接,其他的子進程會再次進入睡眠狀態(tài)。這種情況會導(dǎo)致系統(tǒng)性能的下降。解決這個問題的方法是給accept上鎖,即保證accept操作的原子性。有些UNIX系統(tǒng)在內(nèi)核已經(jīng)解決了這一問題,就無須再給accept上鎖了。如果子進程只是父進程的副本

13、,基本上就不用額外考慮進程通訊的問題了。如果將父進程改造成類似于inetd的守護進程(啟動后先調(diào)用fork()生成子進程,再通過exec系統(tǒng)調(diào)用執(zhí)行服務(wù)處理程序),就必須解決父進程同子進程之間的通訊問題。UNIX下進程通訊的機制有多種,如管道(pipe),具名管道(namedpipe),IPC消息(InterProcessCommunicationMessage)等。這里我們使用IPC消息隊列來向子進程傳遞socket描述字。客戶1圖6使用IPC消息機制的TC騎先派生子進程方法3. 5TCP線程并發(fā)服務(wù)器程序線程的執(zhí)行效率比進程高10到100倍。編寫線程函數(shù)時必須注意函數(shù)的線程安全性。并非所有的UNIX系統(tǒng)或同種UNIX的不同版本都支持線程。由于在方法上線程服務(wù)器程序同進程服務(wù)器程序的設(shè)計差不多,這里就不作多的描述了。4. 結(jié)束語編程人員在編寫具體的服務(wù)器程序時,應(yīng)當(dāng)結(jié)合具體的

溫馨提示

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

評論

0/150

提交評論