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

        ?

        基于Linux的2種HTTP服務(wù)器實(shí)現(xiàn)與對(duì)比分析

        2017-09-30 03:01:56江存
        現(xiàn)代計(jì)算機(jī) 2017年24期
        關(guān)鍵詞:線程報(bào)文服務(wù)器

        江存

        基于Linux的2種HTTP服務(wù)器實(shí)現(xiàn)與對(duì)比分析

        江存

        (四川大學(xué)計(jì)算學(xué)院,成都 610000)

        探討Linux環(huán)境下的多線程并發(fā)編程的問題,介紹采用C語言實(shí)現(xiàn)基于動(dòng)態(tài)線程池模式的簡(jiǎn)單服務(wù)器與基于epoll+多線程模式的簡(jiǎn)單服務(wù)器,采用Webbench進(jìn)行壓力測(cè)試,并對(duì)結(jié)果做出分析與思考。

        線程池;epoll;并發(fā)編程;HTTP

        0 引言

        HTTP協(xié)議是互聯(lián)網(wǎng)中重要的協(xié)議,Web瀏覽器、服務(wù)器和相關(guān)的應(yīng)用程序都是HTTP互通的,對(duì)其進(jìn)行研究十分有必要。本文著重研究分析了HTTP服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)方式,一個(gè)設(shè)計(jì)架構(gòu)良好的服務(wù)器需要高效穩(wěn)定可擴(kuò)展性,盡可能滿足多的任務(wù)請(qǐng)求。本文著重設(shè)計(jì)實(shí)現(xiàn)了態(tài)線程池模式和epoll加多線程模式,并對(duì)其進(jìn)行分析。

        1 原理分析

        1.1 HTTP協(xié)議簡(jiǎn)介

        http服務(wù)器是基于TCP協(xié)議的應(yīng)用層協(xié)議,名為超文本傳輸協(xié)議。Web客戶端與服務(wù)器端進(jìn)行數(shù)據(jù)傳輸就是依靠HTTP協(xié)議實(shí)現(xiàn)的。它是全球因特網(wǎng)使用的公共語言。

        通常,一個(gè)客戶端與服務(wù)器建立連接之后,會(huì)發(fā)送一個(gè)請(qǐng)求個(gè)服務(wù)器,請(qǐng)求報(bào)文的格式一般為:請(qǐng)求起始行、請(qǐng)求首部字段和主體部分。服務(wù)器在將報(bào)文解析出來,在發(fā)送一個(gè)響應(yīng)報(bào)文,和請(qǐng)求報(bào)文類似,也分為三個(gè)部分:響應(yīng)起始行、響應(yīng)首部、響應(yīng)主體。

        請(qǐng)求報(bào)文格式如下:

        <method> <reque-uri> <version>

        <headers>

        <entity-body>

        響應(yīng)報(bào)文格式為:

        <version> <status> <reason-pharse>

        <headers>

        <entity-body>

        ●方法(method)

        客戶希望服務(wù)器對(duì)資源進(jìn)行的動(dòng)作。如get,post等方法。

        ●請(qǐng)求 URL(request-URL)

        所請(qǐng)求的資源地址。

        ●版本(version)

        所使用的HTTP協(xié)議版本。

        ●狀態(tài)碼(status)

        這三位數(shù)字描述了請(qǐng)求過程中所發(fā)生的情況。

        ●原因短語(reason-phrase)

        數(shù)字狀態(tài)碼的可讀版本,包含行終止序列的所有文本。

        ●首部(header)

        可以有零個(gè)或者多個(gè)首部,每個(gè)首部包含一個(gè)名字,后面接一個(gè)逗號(hào),然后是個(gè)可選空格,然后是一個(gè)值,最后是一個(gè)CRLF。

        ●實(shí)體的主體部分(entity-body)

        包含任意數(shù)據(jù)組成的數(shù)據(jù)塊。并不是所有的報(bào)文都包含實(shí)體的主體部分,有時(shí)報(bào)文以一個(gè)CRCL結(jié)束。

        1.2 HTTP服務(wù)器架構(gòu)分析與設(shè)計(jì)

        (1)基于線程池的HTTP服務(wù)器

        由于單個(gè)進(jìn)程無法同時(shí)處理讀個(gè)連接,并且無法發(fā)揮服務(wù)器多核心的優(yōu)勢(shì),但是用多進(jìn)程,每個(gè)進(jìn)程分別處理不同的請(qǐng)求,又太耗費(fèi)資源,所以采用多線程的模型來處理,與此同時(shí),由于HTTP請(qǐng)求和響應(yīng)很快,創(chuàng)建和銷毀線程又非常的頻繁,需要很大的系統(tǒng)資源開銷,所以采用預(yù)先創(chuàng)建線程池來處理HTTP任務(wù),既發(fā)揮了CPU多核心的優(yōu)勢(shì)又減少了不必要的系統(tǒng)開銷。服務(wù)器工作原理如下:首先建立套接字描述符,接著綁定地址,在監(jiān)聽套接字看是否有連接接入,有接入就分配一個(gè)線程去處理任務(wù)。

        其中線程池管理過程為:當(dāng)主線程獲取了一個(gè)連接后,將任務(wù)添加到線程池管理結(jié)構(gòu)中的任務(wù)隊(duì)列中,并檢測(cè)是否需要增加線程,喚醒等待中的線程,喚醒的線程去任務(wù)隊(duì)列中取下任務(wù)進(jìn)行處理,處理完后繼續(xù)隊(duì)列任務(wù)。如此同時(shí),單獨(dú)創(chuàng)建一個(gè)檢測(cè)線程,當(dāng)滿足條件后就會(huì)銷毀一部分線程,以達(dá)到根據(jù)具體需求動(dòng)態(tài)改變線程池大小的需求,如此往復(fù)。

        (2)基于epoll加多線程的HTTP服務(wù)器架構(gòu)

        由于前面采用線程池模型,每個(gè)請(qǐng)求必須要一個(gè)線程去處理,處理完成后才會(huì)去做下一個(gè)任務(wù),如果請(qǐng)求時(shí)保持型的長(zhǎng)連接,那么很快線程池就被消耗完了,而其他的請(qǐng)求得不到滿足。在這個(gè)問題基礎(chǔ)上,改進(jìn)了單獨(dú)線程池模型的不足,采用epoll模型來,為了充分利用多核心的優(yōu)勢(shì),采用了多線程加epoll模型,每個(gè)線程單獨(dú)處理一個(gè)epoll對(duì)象,這樣線程之間互不干擾,減少線程調(diào)度和切換的開銷,同時(shí)提高了CPU的利用率。

        2 詳細(xì)設(shè)計(jì)實(shí)現(xiàn)

        2.1 線程池模型關(guān)鍵結(jié)構(gòu)設(shè)計(jì)

        (1)下面介紹一些必要的數(shù)據(jù)結(jié)構(gòu)

        ●任務(wù)結(jié)點(diǎn)設(shè)計(jì)

        (2)服務(wù)器處理步驟

        圖1

        圖2

        2.2 epoll+多線程模式關(guān)鍵結(jié)構(gòu)設(shè)計(jì)

        (1)epoll主要結(jié)構(gòu)如下

        ①連接信息結(jié)構(gòu)

        void add_epoll_event(int epfd,Conn*conn,int flags)函數(shù)負(fù)責(zé)向epoll對(duì)象中添加事件信息,epfd是epoll對(duì)象文件描述符,conn是連接請(qǐng)求信息,flags事件觸發(fā)方式。

        void mod_epoll_event(int epfd,Conn*conn,int flags)函數(shù)負(fù)責(zé)對(duì)epoll對(duì)象中的事件信息進(jìn)行修改。

        void del_epoll_event_close_fd(int epfd,Conn*conn)函數(shù)負(fù)責(zé)刪除epoll對(duì)象中的事件,并且關(guān)閉套接字描述符fd。

        其他創(chuàng)建和收集發(fā)生事件的連接直接調(diào)用系統(tǒng)函數(shù)epoll_create和epoll_wait函數(shù)。

        (2)基于epoll的服務(wù)器處理流程圖如下:

        圖3

        3 測(cè)試結(jié)果與分析

        筆者采用開源軟件Webbench進(jìn)行測(cè)試,主要采用GET方法請(qǐng)求,屬于I/O型事件處理請(qǐng)求,兩個(gè)模式服務(wù)器部署在同一個(gè)主機(jī)上進(jìn)行測(cè)試,另一個(gè)主機(jī)每次模擬不同數(shù)量的客戶端,每次測(cè)試時(shí)間30秒,測(cè)試10次,失敗為止,表1是基于線程池的服務(wù)器的測(cè)試數(shù)據(jù),表2是基于epoll+多線程的服務(wù)器的測(cè)試數(shù)據(jù),可以看到,隨著并發(fā)客戶數(shù)越多,epoll效率幾乎不受影響,同等條件下,當(dāng)并發(fā)數(shù)超過4000時(shí),線程池服務(wù)器就會(huì)出現(xiàn)請(qǐng)求失敗的情況,而epoll服務(wù)器幾乎不受影響。說明對(duì)于高并發(fā)和I/O型事件,epoll模式要由于一般的線程池模式。測(cè)試結(jié)果如下:

        基于線程池服務(wù)器測(cè)試的截圖和結(jié)果:

        圖4

        圖5

        4 結(jié)語

        筆者研究了HTTP服務(wù)器原理以及實(shí)現(xiàn),并且為了最大可能利用計(jì)算機(jī)資源和盡可能并發(fā)處理程序,經(jīng)過比較最后選擇基于線程池和epoll+線程模式兩種方式進(jìn)行對(duì)比測(cè)試分析,得出在不同情況下根據(jù)具體需求采用不同模型的必要性,當(dāng)并發(fā)程度要求不高,二者性能將近,但是特別是在并發(fā)連接多I/O型事件請(qǐng)求任務(wù)下,epoll模式表現(xiàn)良好。一個(gè)好的服務(wù)器需要考慮很多方面,筆者才疏學(xué)淺只是在相對(duì)理想條件下進(jìn)行測(cè)試,總之對(duì)此還需繼續(xù)深入的研究與分析。

        表1

        表2

        [1]W.Richard Stevens,Stephen A.Rago著.UNIX環(huán)境高級(jí)編程[M].戚正偉,張亞英,尤晉元譯.北京:人民郵電出版社,2014.

        [2]W.Richard Stevens,Bill Fenner,Andrew M.Ruoff著.UNIX網(wǎng)絡(luò)編程[M].北京:人民郵電出版社,2015.

        [3]David Gourley,Brian Totty,Marjorie Sayer,Sailu Reddy,Anshu Aggarwal著.HTTP權(quán)威指南[M].陳涓,趙振平譯.北京:人民郵電出版社,2012.

        [4]王遠(yuǎn)洋,周淵平,郭煥麗.Linux下基于Socket多線程并發(fā)通信的實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2009,25(5).

        [5]催濱,萬旺根,余小清,樓順天.基于EPOLL機(jī)制的Linux網(wǎng)絡(luò)游戲服務(wù)器實(shí)現(xiàn)方法[J].微計(jì)算機(jī)信息,2006,22(7).

        [6]梁明剛,陳西曲.Linux下基于epoll+線程池高并發(fā)服務(wù)器實(shí)現(xiàn)研究[J].武漢輕工大學(xué)學(xué)報(bào),2012,31(3).

        Implementation and Comparison of Two Kinds of HTTP Server Based on Linux

        JIANG Cun
        (College of Computer Science,Sichuan University,Chengdu 610000)

        Discusses the problem of multi-threaded concurrent programming in Linux environment,introduces the simple server based on dynamic thread pool mode and simple server based on epoll+multi-thread mode written in C language and Webbench is used for stress testing,fi?nally makes a summary of test.

        Thread Pool;Epoll;Concurrent Programming;HTTP

        1007-1423(2017)24-0058-05

        10.3969/j.issn.1007-1423.2017.24.014

        江存(1991-),男,湖北黃岡人,碩士研究生,研究方向?yàn)榫W(wǎng)絡(luò)與信息安全

        2017-04-27

        2017-08-05

        猜你喜歡
        線程報(bào)文服務(wù)器
        基于J1939 協(xié)議多包報(bào)文的時(shí)序研究及應(yīng)用
        汽車電器(2022年9期)2022-11-07 02:16:24
        CTCS-2級(jí)報(bào)文數(shù)據(jù)管理需求分析和實(shí)現(xiàn)
        通信控制服務(wù)器(CCS)維護(hù)終端的設(shè)計(jì)與實(shí)現(xiàn)
        淺析反駁類報(bào)文要點(diǎn)
        淺談linux多線程協(xié)作
        得形忘意的服務(wù)器標(biāo)準(zhǔn)
        計(jì)算機(jī)網(wǎng)絡(luò)安全服務(wù)器入侵與防御
        ATS與列車通信報(bào)文分析
        Linux線程實(shí)現(xiàn)技術(shù)研究
        么移動(dòng)中間件線程池并發(fā)機(jī)制優(yōu)化改進(jìn)
        日本成本人片免费网站| 亚洲一区二区三区国产精品视频| 蜜乳一区二区三区亚洲国产| 国产a∨天天免费观看美女| 欧美野外疯狂做受xxxx高潮 | 无码少妇一级AV便在线观看| 日本在线免费精品视频| 91九色国产老熟女视频| 亚洲av日韩综合一区二区三区| 精品人体无码一区二区三区 | 亚洲高清一区二区三区在线播放| 精品无码国产自产拍在线观看蜜| 粗大猛烈进出高潮视频大全| 久激情内射婷内射蜜桃| 色丁香在线观看| 蜜桃av噜噜一区二区三区免费| 公厕偷拍一区二区三区四区五区| 妺妺窝人体色www看美女| 无码国产精品一区二区免费16| 亚洲色图在线视频免费观看 | 久久777国产线看观看精品| 欧美在线 | 亚洲| 成人不卡国产福利电影在线看| 日韩日本国产一区二区| 中国孕妇变态孕交xxxx| 久久99精品国产99久久6男男| 亚洲AV无码一区二区一二区色戒| 成人免费播放视频影院| 大屁股人妻女教师撅着屁股| 91免费永久国产在线观看| 91麻豆精品激情在线观最新| 亚洲av福利院在线观看| 久久久久久久久888| 淫妇日韩中文字幕在线| 美女主播福利一区二区| 黄瓜视频在线观看| 亚洲av永久无码天堂网手机版| 久久天天躁狠狠躁夜夜中文字幕| 午夜视频一区二区三区四区| 一二三四日本中文在线| 亚洲色大成网站www在线观看|