亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux單線程并發(fā)服務(wù)器探索

        2018-04-18 11:05:22劉俊汐
        數(shù)字通信世界 2018年1期
        關(guān)鍵詞:描述符監(jiān)聽服務(wù)器端

        劉俊汐,張 文

        (1.綿陽中學(xué),綿陽 621000;2.電子科技大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,成都 611731)

        1 引言

        大部分的并發(fā)服務(wù)器采用fork子進(jìn)程方式,從而達(dá)到并發(fā)的效果,本文將探索另一種并發(fā)服務(wù)器的設(shè)計(jì)思想,僅使用單線程,就可以完成并發(fā)功能。文中重點(diǎn)講述如何設(shè)計(jì)一個(gè)單線程并發(fā)服務(wù)器,需要怎樣的線程結(jié)構(gòu),以及select函數(shù)在單線程中如何管理眾多的套接字描述符。通過實(shí)驗(yàn)結(jié)果的分析,再次強(qiáng)化對(duì)select函數(shù)的理解,了解套接字描述符的變化過程。

        2 基礎(chǔ)理論

        文件描述符是由內(nèi)核創(chuàng)建的文件的索引,指向被打開的文件,涉及I/O的系統(tǒng)調(diào)用都會(huì)使用文件描述符。而每個(gè)活動(dòng)的套接字由一個(gè)小整數(shù)標(biāo)識(shí),被稱為套接字描述符。由于套接字描述符也存放在文件描述符表中,所以同一進(jìn)程不能擁有相同數(shù)值的文件描述符和套接字描述符。

        Select函數(shù)的原型如下:Int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,st ruct t imeval *t imeout)。主要講述readrfds和timeout參數(shù)。readfds指向可讀文件描述符集,如果其中某個(gè)文件可讀,select的返回值大于0。若沒有處于可讀狀態(tài)的文件,再根據(jù)timeout判斷是否超時(shí),如果超時(shí),select返回0;若select返回負(fù)值,說明出錯(cuò)。如果不關(guān)心任何文件的讀變化可以將readfds指向NULL。writefds、er rorfds與readfds 類似,都是指向文件描述符集。

        timeout指向一個(gè)超時(shí)時(shí)間結(jié)構(gòu)體,通過它控制select的執(zhí)行狀態(tài),若指向NULL,select將以阻塞方式執(zhí)行,直到事件發(fā)生才返回;若將時(shí)間值設(shè)為0,將select變?yōu)橐粋€(gè)非阻塞函數(shù),立刻返回結(jié)果;若timeout值大于0,select僅在timeout時(shí)間段內(nèi)阻塞,若事件出現(xiàn)或時(shí)鐘超時(shí)將返回。

        3 設(shè)計(jì)一個(gè)單線程并發(fā)服務(wù)器

        單線程服務(wù)器中,所有的套接字都由一個(gè)線程管理。試想一個(gè)單線程服務(wù)器,有許多客戶連接到該服務(wù)器上。線程以阻塞方式等待數(shù)據(jù)的到達(dá),一旦任何一個(gè)連接上有數(shù)據(jù)到達(dá),線程將被喚醒,并處理請(qǐng)求和發(fā)送響應(yīng)。然后它將再次阻塞,等待其他連接上的數(shù)據(jù)到達(dá)。只要CPU足夠快地應(yīng)付服務(wù)器上出現(xiàn)的工作負(fù)荷,使用單線程就能像使用多線程那樣處理各個(gè)請(qǐng)求。

        只通過單線程管理所有的套接字,需要使用基礎(chǔ)理論部分提到的select函數(shù)。當(dāng)有新的連接或讀寫I/O準(zhǔn)備就緒,內(nèi)核會(huì)自動(dòng)修改文件描述符集的值。通過將監(jiān)聽套接字和連接套接字都放入select 函數(shù)的可讀文件描述符集中,一旦有新的連接請(qǐng)求或讀I/O準(zhǔn)備就緒,內(nèi)核會(huì)將對(duì)應(yīng)的套接字描述符置為1,借助FD_ISSET宏函數(shù)來確定具體發(fā)生的事件。所以在程序中,只要能找到發(fā)生變化的套接字描述符,即可以進(jìn)行相應(yīng)的操作。

        4 單線程并發(fā)ECHO服務(wù)器設(shè)計(jì)

        在客戶端,首先創(chuàng)建一個(gè)套接字,通過該套接字與服務(wù)器建立連接,在該套接字上不斷完成寫讀操作。如果客戶端完成請(qǐng)求,則可以斷開與服務(wù)器的連接,釋放資源。

        在服務(wù)器端,首先創(chuàng)建監(jiān)聽套接字,將監(jiān)聽套接字放入文件描述符集,通過調(diào)用select函數(shù),由內(nèi)核修改可讀文件描述符集對(duì)應(yīng)位的值,然后判斷是監(jiān)聽套接字就緒還是連接套接字上的讀I/O就緒,若監(jiān)聽套接字就緒,則進(jìn)行連接,并將該套接字描述符加入到活躍文件描述符集afds中;如果連接套接字上的讀I/O就緒,則進(jìn)行數(shù)據(jù)處理,如圖1所示。

        每當(dāng)監(jiān)聽套接字就緒時(shí),即服務(wù)器每連接一個(gè)客戶端,調(diào)用accept函數(shù)返回一個(gè)連接套接字ssock,并將其放入afds活動(dòng)文件描述符集中。若可讀文件描述符集中有就緒I/O時(shí),并且文件描述符不是監(jiān)聽套接字msock,便調(diào)用echo()函數(shù)進(jìn)行回射處理。如果客戶端結(jié)束服務(wù),將其從對(duì)應(yīng)的afds中刪除。

        圖1 服務(wù)器端流程圖

        5 實(shí)驗(yàn)結(jié)果

        首先運(yùn)行服務(wù)器端程序。其套接字描述符的打印值如下,監(jiān)聽套接字為23,最大可用的套接字描述符數(shù)量為1024個(gè)。看到afds中第24位被置為1,由于僅使用幾個(gè)客戶端測(cè)試,所以后面的描述符省略不打印。此時(shí)服務(wù)器程序阻塞于select函數(shù)。msock is:23。

        接著打開一個(gè)客戶端,不發(fā)送數(shù)據(jù)。從打印信息顯示此時(shí)有一個(gè)連接套接字ssock25建立。由于此時(shí)有一個(gè)客戶端建立連接,內(nèi)核修改r fds的狀態(tài),將第24位置為1,表明監(jiān)聽套接字就緒,select 函數(shù)得以返回。活動(dòng)描述符集afds中第24、26被置為1,表示一個(gè)監(jiān)聽套接字和一個(gè)連接套接字。rfds is:

        在客戶端窗口中輸入數(shù)據(jù)sdads,可以看到接收框中顯示相同的數(shù)據(jù)。因?yàn)榇藭r(shí)連接套接字25上的網(wǎng)絡(luò)I/O就緒,所以select將rfds的第26位被置為1并返回,活動(dòng)描述符集afds沒有變化。

        圖2 第一個(gè)客戶端發(fā)送數(shù)據(jù)

        此時(shí)打開第二個(gè)客戶端,不發(fā)送數(shù)據(jù),可以看到顯示連接套接字ssock26,此時(shí)rfds的第24位被置為1,表明監(jiān)聽套接字就緒。因?yàn)橛辛诵碌倪B接,所以afds中第27位被置為1。

        現(xiàn)在關(guān)閉第一個(gè)客戶端,看到rfds的第26位被置1,afds中將25連接套接字對(duì)應(yīng)位刪除,只有一個(gè)連接套接字(26)和一個(gè)監(jiān)聽套接字活躍。

        當(dāng)關(guān)閉第二個(gè)客戶端時(shí),看到rfds的第27位被置1,afds中將26連接套接字對(duì)應(yīng)位刪除,現(xiàn)在只有一個(gè)監(jiān)聽套接字活躍。

        6 結(jié)束語

        由于ECHO服務(wù)器屬于數(shù)據(jù)到達(dá)驅(qū)動(dòng),所以能夠使用單線程服務(wù)器完成多線程服務(wù)器的功能。關(guān)鍵是使用了操作系統(tǒng)的異步I/O函數(shù)select,通過select管理服務(wù)器上所有的套接字描述符,由于函數(shù)返回時(shí)內(nèi)核會(huì)修改套接字描述符集,所以能夠知道有新的連接請(qǐng)求或I/O就緒。

        [1] Douglas E.Comer,David L.Stevens.用TCP/IP進(jìn)行網(wǎng)際互連ü客戶-服務(wù)器編程與應(yīng)用[M].北京∶電子工業(yè)出版社,2008.

        [2] W.Richard Stevens,Bill Fenner,Andrew M.Rudoff.UNIX 網(wǎng)絡(luò)編程 卷 1 :套接字網(wǎng)絡(luò)編程API.第3版[M].北京∶人民郵電出版社,2015.

        猜你喜歡
        描述符監(jiān)聽服務(wù)器端
        基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
        千元監(jiān)聽風(fēng)格Hi-Fi箱新選擇 Summer audio A-401
        基于AKAZE的BOLD掩碼描述符的匹配算法的研究
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        利用CNN的無人機(jī)遙感影像特征描述符學(xué)習(xí)
        網(wǎng)絡(luò)監(jiān)聽的防范措施
        電子制作(2017年20期)2017-04-26 06:58:02
        在Windows中安裝OpenVPN
        應(yīng)召反潛時(shí)無人機(jī)監(jiān)聽航路的規(guī)劃
        局域網(wǎng)監(jiān)聽軟件的設(shè)計(jì)
        河南科技(2014年5期)2014-02-27 14:08:21
        網(wǎng)頁(yè)防篡改中分布式文件同步復(fù)制系統(tǒng)
        久久午夜福利无码1000合集 | 免费国产在线精品一区| 国产真实乱对白精彩| 久久久久麻豆v国产精华液好用吗 欧美性猛交xxxx乱大交丰满 | 无码精品一区二区三区超碰| 熟女少妇av免费观看| 国产免费人成视频在线观看播放播| 精品国产成人av久久| 亚欧免费无码aⅴ在线观看| 亚洲av中文无码字幕色三| AV熟妇导航网| 手机在线播放成人av| 人妻久久久一区二区三区蜜臀| 偷偷色噜狠狠狠狠的777米奇| 丝袜足控一区二区三区| 国产精品制服一区二区| 五月婷婷开心五月播五月| 精品国产品香蕉在线| 人人爽久久涩噜噜噜av| 亚洲AV永久无码精品导航| 日本午夜一区二区视频| 日本一级二级三级不卡| 亚洲中文字幕无码天然素人在线| 亚洲综合色自拍一区| 无码专区亚洲avl| 亚洲性感毛片在线视频| 日本中文字幕一区二区有码在线| 精品少妇人妻av无码专区 | 国产精品特级毛片一区二区三区| 亚洲∧v久久久无码精品| www.av在线.com| 97人妻中文字幕总站| 亚洲欧美综合精品成人网站| 国产熟女露脸大叫高潮| 亚洲中文字幕av天堂| 精品人妻日韩中文字幕| 国精产品一区一区三区| 国产97色在线 | 亚洲| 亚洲黄色性生活一级片| 国产一区二区视频在线看| 精品香蕉99久久久久网站|