<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

    不可不知 Linux操作系統(tǒng)網(wǎng)絡(luò)服務(wù)器模型

     Linux系統(tǒng)網(wǎng)絡(luò)服務(wù)器模型主要有兩種:并發(fā)服務(wù)器和循環(huán)服務(wù)器。

      所謂并發(fā)服務(wù)器就是在同一個(gè)時(shí)刻可以處理來(lái)自多個(gè)客戶端的請(qǐng)求;循環(huán)服務(wù)器是指服務(wù)器在同一時(shí)刻指可以響應(yīng)一個(gè)客戶端的請(qǐng)求。而且對(duì)于TCP和UDP套接字,這兩種服務(wù)器的實(shí)現(xiàn)方式也有不同的特點(diǎn)。

      1、TCP循環(huán)服務(wù)器:

      首先TCP服務(wù)器接受一個(gè)客戶端的連接請(qǐng)求,處理連接請(qǐng)求,在完成這個(gè)客戶端的所有請(qǐng)求后斷開連接,然后再接受下一個(gè)客戶端的請(qǐng)求。

      創(chuàng)建TCP循環(huán)服務(wù)器的算法如下:socket(……); //創(chuàng)建一個(gè)TCP套接字bind(……); //邦定公認(rèn)的端口號(hào)listen(……); //傾聽(tīng)客戶端連接while(1) //開始循環(huán)接收客戶端連接{ accept(……);//接收當(dāng)前客戶端的連接while(1)

      { //處理當(dāng)前客戶端的請(qǐng)求read(……);process(……);write(……);} close(……); //關(guān)閉當(dāng)前客戶端的連接,準(zhǔn)備接收下一個(gè)客戶端連接} TCP循環(huán)服務(wù)器一次只處理一個(gè)客戶端的請(qǐng)求,如果有一個(gè)客戶端占用服務(wù)器不放時(shí),其它的客戶機(jī)連接請(qǐng)求都得不到及時(shí)的響應(yīng)。因此,TCP服務(wù)器一般很少用循環(huán)服務(wù)器模型的。

      2、TCP并發(fā)服務(wù)器:

      并發(fā)服務(wù)器的思想是每一個(gè)客戶端的請(qǐng)求并不由服務(wù)器的主進(jìn)程直接處理,而是服務(wù)器主進(jìn)程創(chuàng)建一個(gè)子進(jìn)程來(lái)處理。

      創(chuàng)建TCP并發(fā)服務(wù)器的算法如下:socket(……); //創(chuàng)建一個(gè)TCP套接字bind(……); //邦定公認(rèn)的端口號(hào)listen(……);//傾聽(tīng)客戶端連接while(1) //開始循環(huán)接收客戶端的接收{(diào) accept(……);//接收一個(gè)客戶端的連接if(fork(……)==0) //創(chuàng)建子進(jìn)程{ while(1)

      { //子進(jìn)程處理某個(gè)客戶端的連接read(……);process(……);write(……);} close(……); //關(guān)閉子進(jìn)程處理的客戶端連接exit(……) ;//終止該子進(jìn)程} close(……); //父進(jìn)程關(guān)閉連接套接字描述符,準(zhǔn)備接收下一個(gè)客戶端連接} TCP并發(fā)服務(wù)器可以解決TCP循環(huán)服務(wù)器客戶端獨(dú)占服務(wù)器的情況。但同時(shí)也帶來(lái)了一個(gè)不小的問(wèn)題,即響應(yīng)客戶機(jī)的請(qǐng)求,服務(wù)器要?jiǎng)?chuàng)建子進(jìn)程來(lái)處理,而創(chuàng)建子進(jìn)程是一種非常消耗資源的操作。

      3、UDP循環(huán)服務(wù)器:

      UDP服務(wù)器每次從套接字上讀取一個(gè)客戶端的數(shù)據(jù)報(bào)請(qǐng)求,處理接收到的UDP數(shù)據(jù)報(bào),然后將結(jié)果返回給客戶機(jī)。

      創(chuàng)建UDP循環(huán)服務(wù)器的算法如下:socket(……); //創(chuàng)建一個(gè)數(shù)據(jù)報(bào)類型的套接字bind(……); //邦定公認(rèn)的短口號(hào)while(1) //開始接收客戶端的連接{ //接收和處理客戶端的UDP數(shù)據(jù)報(bào)recvfrom(……);process(……);sendto(……);//準(zhǔn)備接收下一個(gè)客戶機(jī)的數(shù)據(jù)報(bào)}因?yàn)閁DP是非面向連接的,沒(méi)有一個(gè)客戶端可以獨(dú)占服務(wù)器。只要處理過(guò)程不是死循環(huán),服務(wù)器對(duì)于每一個(gè)客戶機(jī)的請(qǐng)求總是能夠處理的。

      UDP循環(huán)服務(wù)器在數(shù)據(jù)報(bào)流量過(guò)大時(shí)由于處理任務(wù)繁重可能造成客戶技數(shù)據(jù)報(bào)丟失,但是因?yàn)閁DP協(xié)議本身不保證數(shù)據(jù)報(bào)可靠到達(dá),所以UDP協(xié)議是允許丟失數(shù)據(jù)報(bào)的。

      鑒于以上兩點(diǎn),一般的UDP服務(wù)器采用循環(huán)方式4、UDP并發(fā)服務(wù)器把并發(fā)的概念應(yīng)用UDP就得到了并發(fā)UDP服務(wù)器,和并發(fā)TCP服務(wù)器模型一樣是創(chuàng)建子進(jìn)程來(lái)處理的。

      創(chuàng)建UDP并發(fā)服務(wù)器的算法如下:socket(……); //創(chuàng)建一個(gè)數(shù)據(jù)報(bào)類型的套接字bind(……); //邦定公認(rèn)的短口號(hào)while(1) //開始接收客戶端的連接{ //接收和處理客戶端的UDP數(shù)據(jù)報(bào)recvfrom(……);if(fork(……)==0) //創(chuàng)建子進(jìn)程{ process(……);sendto(……);}除非服務(wù)器在處理客戶端的請(qǐng)求所用的時(shí)間比較長(zhǎng)以外,人們實(shí)際上很少用這種UDP并發(fā)服務(wù)器模型的。

      4、多路復(fù)用I/O并發(fā)服務(wù)器:

      創(chuàng)建子進(jìn)程會(huì)帶來(lái)系統(tǒng)資源的大量消耗,為了解決這個(gè)問(wèn)題,采用多路復(fù)用I/O模型的并發(fā)服務(wù)器。采用select函數(shù)創(chuàng)建多路復(fù)用I/O模型的并發(fā)服務(wù)器的算法如下:

      初始化(socket,bind,listen);while(1)

      {設(shè)置監(jiān)聽(tīng)讀寫文件描述符(FD_*);調(diào)用select;如果是傾聽(tīng)套接字就緒,說(shuō)明一個(gè)新的連接請(qǐng)求建立{建立連接(accept);加入到監(jiān)聽(tīng)文件描述符中去;}否則說(shuō)明是一個(gè)已經(jīng)連接過(guò)的描述符{進(jìn)行操作(read或者write);}多路復(fù)用I/O可以解決資源限制問(wèn)題,此模型實(shí)際上是將UDP循環(huán)模型用在了TCP上面。這也會(huì)帶了一些問(wèn)題,如由于服務(wù)器依次處理客戶的請(qǐng)求,所以可能導(dǎo)致友的客戶會(huì)等待很久。

    posted on 2011-11-15 15:14 順其自然EVO 閱讀(154) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2011年11月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 久久亚洲国产成人影院| 嫖丰满老熟妇AAAA片免费看| 亚洲熟妇无码av另类vr影视| 亚洲VA中文字幕不卡无码| 亚洲AⅤ优女AV综合久久久| 永久免费毛片在线播放| 久草免费福利资源站| 一级毛片免费播放视频| 亚洲精品又粗又大又爽A片| 亚洲大香伊人蕉在人依线| 亚洲av无码不卡一区二区三区| 亚洲国产精品一区二区三区久久| 日韩av无码成人无码免费| 国产h视频在线观看网站免费| 在线观看免费播放av片| 国产精品hd免费观看| 美女被免费视频网站| 久久精品国产亚洲av瑜伽| 在线aⅴ亚洲中文字幕| 亚洲最新黄色网址| 亚洲乱亚洲乱淫久久| 亚洲精品乱码久久久久久久久久久久| 四虎影库久免费视频| 四虎影院永久免费观看| 日本高清色本免费现在观看| 免费看a级黄色片| 日韩精品无码人妻免费视频 | 国产av无码专区亚洲国产精品| 永久免费观看的毛片的网站| 最近免费中文字幕大全视频| 在线观看免费人成视频色9| 国产1000部成人免费视频| 亚洲人成网站免费播放| 久久精品网站免费观看| 毛片免费视频播放| 最近中文字幕无吗免费高清| 97在线线免费观看视频在线观看| 毛片免费vip会员在线看| 好吊妞在线成人免费| 免费人成在线观看网站视频 | 亚洲精华国产精华精华液网站|