




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第14章服務(wù)器模型選擇14.1循環(huán)服務(wù)器14.2簡(jiǎn)單并發(fā)服務(wù)器14.3TCP的高級(jí)并發(fā)服務(wù)器模型14.4IO復(fù)用循環(huán)服務(wù)器14.1循環(huán)服務(wù)器14.1.1UDP循環(huán)服務(wù)器14.1.2TCP循環(huán)服務(wù)器14.1.1UDP循環(huán)服務(wù)器1.循環(huán)服務(wù)器的服務(wù)器端2.循環(huán)服務(wù)器的客戶端1.循環(huán)服務(wù)器的服務(wù)器端19
s=socket(AF_INET,SOCK_DGRAM,0);
/*建立UDP套接字*/27
/*將套接字文件描述符綁定到本地地址和端口*/28
bind(s,(structsockaddr*)&local,sizeof(local));30
while(1)31
{32
memset(buff,0,BUFFLEN);
/*清零*/33
n=recvfrom(s,buff,BUFFLEN,0,(structsockaddr*)&to,&len);...42
}2.循環(huán)服務(wù)器的客戶端18
s=socket(AF_INET,SOCK_DGRAM,0);
/*建立UDP套接字*/28
/*發(fā)送數(shù)據(jù)*/29
sendto(s,buff,strlen(buff),0,(structsockaddr*)&server,
sizeof(server));33
n=recvfrom(s,buff,BUFFLEN,0,(structsockaddr*)&server,&len);14.1.2TCP循環(huán)服務(wù)器相比較UDP協(xié)議的循環(huán)服務(wù)器,TCP協(xié)議的循環(huán)服務(wù)器的主處理過(guò)程中多了一個(gè)accept的過(guò)程,服務(wù)器在此處等待客戶端的連接,由于accept()函數(shù)為阻塞函數(shù),所以通常情況下,服務(wù)器會(huì)在此處進(jìn)行等待。對(duì)accept()函數(shù)的不同處理是區(qū)別各種服務(wù)器類(lèi)型的一個(gè)重要依據(jù)。1.TCP循環(huán)服務(wù)器介紹2.服務(wù)器端代碼1.TCP循環(huán)服務(wù)器介紹TCP服務(wù)器使用socket()函數(shù)建立套接字文件描述符后,對(duì)地址和套接字文件描述符使用bind()函數(shù)進(jìn)行綁定,使用listen()函數(shù)設(shè)定偵聽(tīng)的隊(duì)列長(zhǎng)度,然后進(jìn)入循環(huán)服務(wù)器的主處理過(guò)程。2.服務(wù)器端代碼服務(wù)器端的代碼如下:20
/*建立TCP套接字*/21
s_s=socket(AF_INET,SOCK_STREAM,0);29
/*將套接字文件描述符綁定到本地地址和端口*/30
bind(s_s,(structsockaddr*)&local,sizeof(local));31
listen(s_s,BACKLOG);
/*偵聽(tīng)*/34
while(1)35
{36
/*接收客戶端連接*/37
s_c=
accept(s_s,(structsockaddr*)&from,&len);38
memset(buff,0,BUFFLEN);
/*清零*/39
n=recv(s_c,buff,BUFFLEN,0);
/*接收發(fā)送方數(shù)據(jù)*/...48
}3.客戶端客戶端的程序先建立一個(gè)TCP類(lèi)型的套接字,然后設(shè)置請(qǐng)求服務(wù)器的地址和端口網(wǎng)絡(luò)地址結(jié)構(gòu)。16
/*建立TCP套接字*/17
s=socket(AF_INET,SOCK_STREAM,0);...25
/*連接服務(wù)器*/26
connect(s,(struct
sockaddr*)&server,sizeof(server));27
memset(buff,0,BUFFLEN);
/*清零*/28
strcpy(buff,"TIME");
/*復(fù)制發(fā)送字符串*/29
/*發(fā)送數(shù)據(jù)*/30
send(s,buff,strlen(buff),0);31
memset(buff,0,BUFFLEN);
/*清零*/32
/*接收數(shù)據(jù)*/
33
n=recv(s,buff,BUFFLEN,0);14.2簡(jiǎn)單并發(fā)服務(wù)器14.2.1并發(fā)服務(wù)器的模型14.2.2UDP并發(fā)服務(wù)器14.2.3TCP并發(fā)服務(wù)器14.2.1并發(fā)服務(wù)器的模型在服務(wù)器端,主程序提前構(gòu)建多個(gè)子進(jìn)程,當(dāng)客戶端的請(qǐng)求到來(lái)的時(shí)候,系統(tǒng)從進(jìn)程池中選取一個(gè)子進(jìn)程處理客戶端的連接,每個(gè)子進(jìn)程處理一個(gè)客戶端的請(qǐng)求,在全部子進(jìn)程的處理能力得到滿足之前,服務(wù)器的網(wǎng)絡(luò)負(fù)載是基本不變的。14.2.2UDP并發(fā)服務(wù)器上述并發(fā)服務(wù)器模型在UDP協(xié)議的實(shí)現(xiàn)模式如圖所示。1.UDP并發(fā)服務(wù)器介紹2.UDP并發(fā)服務(wù)器的例子1.UDP并發(fā)服務(wù)器介紹在建立套接字文件描述符后,對(duì)描述符和本地的地址端口進(jìn)行綁定。然后fork()多個(gè)子進(jìn)程,客戶端請(qǐng)求的處理在子進(jìn)程中進(jìn)行。2.UDP并發(fā)服務(wù)器的例子對(duì)于客戶端的請(qǐng)求,有多個(gè)子進(jìn)程進(jìn)行處理。與循環(huán)服務(wù)器相比較,并發(fā)的UDP程序,在處理客戶端請(qǐng)求的時(shí)候,不再簡(jiǎn)單地使用一個(gè)while進(jìn)行客戶端請(qǐng)求的串行處理,而是fork一個(gè)進(jìn)程,將客戶端的請(qǐng)求放到一個(gè)進(jìn)程中進(jìn)行處理。63
for(i=0;i<PIDNUMB;i++)64
{65
pid[i]=fork();66
if(pid[i]==0)
/*子進(jìn)程*/67
{68
handle_connect(s_s);69
}70
}14.2.3TCP并發(fā)服務(wù)器簡(jiǎn)單并發(fā)服務(wù)器的TCP模型相比較UDP協(xié)議的并發(fā)服務(wù)器,TCP協(xié)議的并發(fā)服務(wù)器的主處理過(guò)程中多了一個(gè)accept的過(guò)程,服務(wù)器在此處等待客戶端的連接,由于accept()函數(shù)為阻塞函數(shù),所以通常情況下,服務(wù)器會(huì)在此處等待。對(duì)accept()函數(shù)的不同處理是區(qū)別各種服務(wù)器類(lèi)型的一個(gè)重要依據(jù)。1.TCP并發(fā)服務(wù)器介紹2.TCP并發(fā)服務(wù)器的例子1.TCP并發(fā)服務(wù)器介紹TCP服務(wù)器使用socket()函數(shù)建立套接字文件描述符后,對(duì)地址和套接字文件描述符使用bind()函數(shù)進(jìn)行綁定,使用listen()函數(shù)設(shè)定偵聽(tīng)的隊(duì)列長(zhǎng)度,然后進(jìn)入并發(fā)服務(wù)器的主處理過(guò)程。2.TCP并發(fā)服務(wù)器的例子在處理客戶端請(qǐng)求之前,程序先分叉了3個(gè)子進(jìn)程,對(duì)應(yīng)多個(gè)客戶端的請(qǐng)求,由多個(gè)子進(jìn)程進(jìn)行處理。52
/*建立TCP套接字*/53
s_s=socket(AF_INET,SOCK_STREAM,0);...61
/*將套接字文件描述符綁定到本地地址和端口*/62
bind(s_s,(structsockaddr*)&local,sizeof(local));63
listen(s_s,BACKLOG);
/*偵聽(tīng)*/64
65
/*處理客戶端連接*/66
pid_tpid[PIDNUMB];67
inti=0;68
for(i=0;i<PIDNUMB;i++)69
{70
pid[i]=fork();71
if(pid[i]==0)
/*子進(jìn)程*/72
{73
handle_connect(s_s);74
}75
}14.3TCP的高級(jí)并發(fā)服務(wù)器模型14.3.1單客戶端單進(jìn)程,統(tǒng)一accept()14.3.2單客戶端單線程,統(tǒng)一accept()14.3.3單客戶端單線程,各線程獨(dú)自accept(),使用互斥鎖14.3.1單客戶端單進(jìn)程,統(tǒng)一accept()在14.2節(jié)中介紹了簡(jiǎn)單的并發(fā)服務(wù)器模型,模型中服務(wù)器在客戶端到來(lái)之前就預(yù)分叉了多個(gè)子進(jìn)程用于處理客戶端的連接請(qǐng)求。1.原型介紹2.例子代碼1.原型介紹本節(jié)中介紹的并發(fā)服務(wù)器模型并不預(yù)先分叉進(jìn)程,而是由主進(jìn)程統(tǒng)一處理客戶端的連接,當(dāng)客戶端的連接請(qǐng)求到來(lái)時(shí),才臨時(shí)fork()進(jìn)程,由子進(jìn)程處理客戶端的請(qǐng)求。這種模型將客戶端的連接請(qǐng)求和業(yè)務(wù)處理進(jìn)行了分離,相比較來(lái)說(shuō)條理更清晰。2.例子代碼TCP并發(fā)服務(wù)器,在處理客戶端請(qǐng)求之前,程序先分叉了3個(gè)子進(jìn)程,對(duì)于多個(gè)客戶端的請(qǐng)求,由多個(gè)子進(jìn)程進(jìn)行處理。與循環(huán)服務(wù)器相比較,并發(fā)的TCP程序,在處理客戶端請(qǐng)求時(shí),不再簡(jiǎn)單地使用一個(gè)while進(jìn)行客戶端請(qǐng)求的串行處理。14.3.2單客戶端單線程,統(tǒng)一accept()與進(jìn)程相比較,線程有很多優(yōu)點(diǎn),例如速度快、占用資源少、數(shù)據(jù)可以共享等。14.3.3單客戶端單線程,各線程獨(dú)自accept(),使用互斥鎖本節(jié)介紹的模型為預(yù)先分配線程,而不是進(jìn)程的模型。在線程的accept()函數(shù)中,多個(gè)線程都可以使用此函數(shù)處理客戶端的連接。為了防止沖突,使用了線程互斥鎖。在調(diào)用函數(shù)之前鎖定,調(diào)用函數(shù)accept()之后,釋放鎖。14.4IO復(fù)用循環(huán)服務(wù)器14.4.1IO復(fù)用循環(huán)服務(wù)器模型介紹14.4.2IO復(fù)用循環(huán)服務(wù)器模型的例子14.4.1IO復(fù)用循環(huán)服務(wù)器模型介紹與通常的TCP服務(wù)器相同,這種服務(wù)器首先要調(diào)用soc
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 場(chǎng)員工聘用勞動(dòng)合同
- 描述在線教育平臺(tái)的市場(chǎng)定位和用戶需求分析
- 臥室?guī)ь伾槟z漆施工方案
- 高層租賃住房居住區(qū)設(shè)計(jì)方案
- 酒店業(yè)務(wù)數(shù)據(jù)統(tǒng)計(jì)表(入住、預(yù)訂3個(gè))
- 股份制合作框架協(xié)議文書(shū)草案
- 三農(nóng)產(chǎn)品品牌國(guó)際化與本土化戰(zhàn)略規(guī)劃方案
- 企業(yè)管理咨詢(xún)合同書(shū)
- 建筑工程投資合伙協(xié)議書(shū)
- 鄂州醇酸防銹漆施工方案
- 2025年寧波城市職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- 2025年充電樁場(chǎng)地租賃合同官方版模板
- DeepSeek的應(yīng)用與部署
- 初中班會(huì) 《哪吒 2:勇戰(zhàn)困難伴夢(mèng)前行》開(kāi)學(xué)第一課主題班會(huì) 教案
- 《馬爾科夫過(guò)程介紹》課件
- 四川成都?xì)v年中考語(yǔ)文現(xiàn)代文閱讀之非連續(xù)性文本閱讀4篇(截至2024年)
- 中國(guó)地圖填色圖(任何顏色可變)
- 交通運(yùn)輸安全員崗位職責(zé)概述
- 2025年上半年廣西宏桂集團(tuán)匯興資產(chǎn)管理限公司招聘5人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年安徽中醫(yī)藥高等專(zhuān)科學(xué)校高職單招職業(yè)適應(yīng)性測(cè)試近5年常考版參考題庫(kù)含答案解析
- 2025年楊凌職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
評(píng)論
0/150
提交評(píng)論