濮阳杆衣贸易有限公司

主頁 > 知識庫 > Linux操作系統(tǒng)網絡服務器模型分享

Linux操作系統(tǒng)網絡服務器模型分享

熱門標簽:為什么地圖標注后不顯示 大連遼寧電銷機器人 400電話辦理 誠薦翰諾科技 谷歌美發(fā)店地圖標注入駐 地圖標注路線軟件 好操作的電話機器人 了不起的修仙模擬器地圖標注 地圖標注機位 電話機器人客戶對話

所謂并發(fā)服務器就是在同一個時刻可以處理來自多個客戶端的請求;循環(huán)服務器是指服務器在同一時刻只可以響應一個客戶端的請求。而且對于TCP和UDP套接字,這兩種服務器的實現方式也有不同的特點。
1、TCP循環(huán)服務器:
  首先TCP服務器接受一個客戶端的連接請求,處理連接請求,在完成這個客戶端的所有請求后斷開連接,然后再接受下一個客戶端的請求。創(chuàng)建TCP循環(huán)服務器的算法如下:

復制代碼
代碼如下:

socket(……); //創(chuàng)建一個TCP套接字
bind(……); //邦定公認的端口號
listen(……); //傾聽客戶端連接
while(1) //開始循環(huán)接收客戶端連接
{
accept(……);//接收當前客戶端的連接
while(1)
{ //處理當前客戶端的請求
read(……);
process(……);
write(……);
}
close(……); //關閉當前客戶端的連接,準備接收下一個客戶端連接
}

TCP循環(huán)服務器一次只處理一個客戶端的請求,如果有一個客戶端占用服務器不放時,其它的客戶機連接請求都得不到及時的響應。因此,TCP服務器一般很少用循環(huán)服務器模型的。
2、TCP并發(fā)服務器:
  并發(fā)服務器的思想是每一個客戶端的請求并不由服務器的主進程直接處理,而是服務器主進程創(chuàng)建一個子進程來處理。創(chuàng)建TCP并發(fā)服務器的算法如下:

復制代碼
代碼如下:

socket(……); //創(chuàng)建一個TCP套接字
bind(……); //邦定公認的端口號
listen(……);//傾聽客戶端連接
while(1) //開始循環(huán)接收客戶端的接收
{
accept(……);//接收一個客戶端的連接
if(fork(……)==0) //創(chuàng)建子進程
{
while(1)
{ //子進程處理某個客戶端的連接
read(……);
process(……);
write(……);
}
close(……); //關閉子進程處理的客戶端連接
exit(……) ;//終止該子進程
}
close(……); //父進程關閉連接套接字描述符,準備接收下一個客戶端連接
}

TCP并發(fā)服務器可以解決TCP循環(huán)服務器客戶端獨占服務器的情況。但同時也帶來了一個不小的問題,即響應客戶機的請求,服務器要創(chuàng)建子進程來處理,而創(chuàng)建子進程是一種非常消耗資源的操作。
3、UDP循環(huán)服務器:
  UDP服務器每次從套接字上讀取一個客戶端的數據報請求,處理接收到的UDP數據報,然后將結果返回給客戶機。創(chuàng)建UDP循環(huán)服務器的算法如下:
1 socket(……); //創(chuàng)建一個數據報類型的套接字 2 bind(……); //邦定公認的短口號 3 while(1) //開始接收客戶端的連接 4 { //接收和處理客戶端的UDP數據報 5 recvfrom(……); 6 process(……); 7 sendto(……);//準備接收下一個客戶機的數據報 8 }
消除行號
因為UDP是非面向連接的,沒有一個客戶端可以獨占服務器。只要處理過程不是死循環(huán),服務器對于每一個客戶機的請求總是能夠處理的。
  UDP循環(huán)服務器在數據報流量過大時由于處理任務繁重可能造成客戶技數據報丟失,但是因為UDP協(xié)議本身不保證數據報可靠到達,所以UDP協(xié)議是允許丟失數據報的。
  鑒于以上兩點,一般的UDP服務器采用循環(huán)方式4、UDP并發(fā)服務器把并發(fā)的概念應用UDP就得到了并發(fā)UDP服務器,和并發(fā)TCP服務器模型一樣是創(chuàng)建子進程來處理的。
  創(chuàng)建UDP并發(fā)服務器的算法如下:

復制代碼
代碼如下:

socket(……); //創(chuàng)建一個數據報類型的套接字
bind(……); //邦定公認的短口號
while(1) //開始接收客戶端的連接
{ //接收和處理客戶端的UDP數據報
recvfrom(……);
if(fork(……)==0) //創(chuàng)建子進程
{
rocess(……);
sendto(……);
}
}

除非服務器在處理客戶端的請求所用的時間比較長以外,人們實際上很少用這種UDP并發(fā)服務器模型的。
4、多路復用I/O并發(fā)服務器:
  創(chuàng)建子進程會帶來系統(tǒng)資源的大量消耗,為了解決這個問題,采用多路復用I/O模型的并發(fā)服務器。采用select函數創(chuàng)建多路復用I/O模型的并發(fā)服務器的算法如下:
初始化(socket,bind,listen);

復制代碼
代碼如下:

while(1)
{
設置監(jiān)聽讀寫文件描述符(FD_*);
調用select;
如果是傾聽套接字就緒,說明一個新的連接請求建立
{
建立連接(accept);
加入到監(jiān)聽文件描述符中去;
}
否則說明是一個已經連接過的描述符
{
進行操作(read或者write);
}

多路復用I/O可以解決資源限制問題,此模型實際上是將UDP循環(huán)模型用在了TCP上面。這也會帶了一些問題,如由于服務器依次處理客戶的請求,所以可能導致友的客戶會等待很久。

標簽:東營 阜陽 云浮 慶陽 新鄉(xiāng) 法律服務 沈陽 邵陽

巨人網絡通訊聲明:本文標題《Linux操作系統(tǒng)網絡服務器模型分享》,本文關鍵詞  Linux,操作系統(tǒng),網絡,服務器,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux操作系統(tǒng)網絡服務器模型分享》相關的同類信息!
  • 本頁收集關于Linux操作系統(tǒng)網絡服務器模型分享的相關信息資訊供網民參考!
  • 推薦文章
    桂东县| 南通市| 景宁| 泗洪县| 五大连池市| 靖安县| 曲阳县| 万州区| 思南县| 山丹县| 丹东市| 龙里县| 汉沽区| 山西省| 诸暨市| 措美县| 盐池县| 卢龙县| 嘉荫县| 兴宁市| 五指山市| 临高县| 霍城县| 禹州市| 祁东县| 卓尼县| 子长县| 阿克| 锦屏县| 荆门市| 包头市| 克拉玛依市| 重庆市| 屏东市| 荆州市| 余江县| 合水县| 江山市| 乌兰浩特市| 青海省| 信丰县|