摘要:構(gòu)建高性能服務(wù)器前言一想法一直想用做個(gè)項(xiàng)目,因?yàn)楸容^喜歡網(wǎng)絡(luò)通信這部分,又讓事情變得更有些挑戰(zhàn)性,我最終選擇實(shí)現(xiàn)一個(gè)高性能的服務(wù)器。
C++構(gòu)建高性能Web服務(wù)器——Step 0:前言 一、想法:
一直想用C++做個(gè)項(xiàng)目,因?yàn)楸容^喜歡網(wǎng)絡(luò)通信這部分,又讓事情變得更有些挑戰(zhàn)性,我最終選擇實(shí)現(xiàn)一個(gè)高性能的Web服務(wù)器。
在宏觀上我希望TinyWeb能夠這樣:
配置簡(jiǎn)單
擴(kuò)展容易
性能高效
功能強(qiáng)大
并希望在開(kāi)發(fā)的過(guò)程中能夠掌握以下知識(shí):
Unix環(huán)境編程的技能
Unix網(wǎng)絡(luò)編程的技能
鞏固C++11知識(shí)
掌握構(gòu)建大型C++項(xiàng)目的技能
掌握多進(jìn)程、多線程同步、通信機(jī)制
實(shí)現(xiàn)高性能可復(fù)用Memory-pool
掌握基本的數(shù)據(jù)結(jié)構(gòu)(紅黑樹(shù)、鏈表、Hash)
能夠把通用的網(wǎng)絡(luò)部分作為多帶帶的網(wǎng)絡(luò)庫(kù)、為以后網(wǎng)絡(luò)開(kāi)發(fā)提升效率
TinyWeb 目前的功能是:
基本的Web服務(wù),只能提供靜態(tài)網(wǎng)頁(yè)服務(wù)。
單進(jìn)程+Reactor+非阻塞方式運(yùn)行
只能用于Linux系統(tǒng),不專注跨平臺(tái)
基本的Web服務(wù)配置
TinyWeb 目前的發(fā)展計(jì)劃:
使用進(jìn)程池的方式提高并發(fā)性
強(qiáng)有力的支持多種版本Http協(xié)議
負(fù)載均衡功能
代理功能
二、設(shè)計(jì)思想 1. 網(wǎng)絡(luò)中最麻煩的是如何處理阻塞的事件:如果IO事件沒(méi)有發(fā)生,系統(tǒng)阻塞的等待IO事件發(fā)生,那么CPU就被
浪費(fèi)了,為實(shí)現(xiàn)高并發(fā),不能讓進(jìn)程阻塞,CPU等待IO事件.
借助Linux高效的Epoll機(jī)制,
至于為何使用Epoll,而不使用Select或Poll,點(diǎn)這里看看吧.
2.為了提高并發(fā)性:到底是選擇多進(jìn)程還是多線程模式3.C++最難管理的還是內(nèi)存多進(jìn)程與多線程各有優(yōu)缺點(diǎn),并且大部分是互補(bǔ)的,具體就不再贅述了,
詳情請(qǐng)戳這里
我選擇多進(jìn)程的原因是:安全性高,一個(gè)進(jìn)程崩潰不會(huì)影響別的進(jìn)程
容易調(diào)試,不易造成死鎖
有較為成熟的進(jìn)程間通信同步機(jī)制(共享內(nèi)存,信號(hào),文件鎖,socketpair....)
在接受客戶端連接的時(shí)候,如何再去創(chuàng)建一個(gè)進(jìn)程,效率低下.故因此采用進(jìn)程池的方式:
Master進(jìn)程為父進(jìn)程,主要控制子進(jìn)程的狀態(tài);可動(dòng)態(tài)配置數(shù)量的Slave子進(jìn)程,用于接受連接,
處理Http邏輯.
為了方便的進(jìn)行內(nèi)存管理,我設(shè)計(jì)了一個(gè)內(nèi)存池,不會(huì)產(chǎn)生大量的內(nèi)存碎片,性能待測(cè)試.以后還會(huì)4.進(jìn)程間通信的方式很多,到底選擇哪幾個(gè)
介紹如何實(shí)現(xiàn)的,盡請(qǐng)期待.
三、源碼了解了下Nginx,有考慮了使用的復(fù)雜度,我決定使用這幾個(gè)通信.同步機(jī)制
原子操作
信號(hào)量
消息隊(duì)列
共享內(nèi)存
信號(hào)
想要源代碼的請(qǐng)戳這里,希望大家多多對(duì)代碼風(fēng)格做出評(píng)判,畢竟自己只是個(gè)大三的學(xué)生.
四、參考文獻(xiàn)小伙伴想要了解更多的高性能的網(wǎng)絡(luò)編程,推薦一個(gè)大神的專欄
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/70944.html
摘要:構(gòu)建高性能服務(wù)器前言一想法一直想用做個(gè)項(xiàng)目,因?yàn)楸容^喜歡網(wǎng)絡(luò)通信這部分,又讓事情變得更有些挑戰(zhàn)性,我最終選擇實(shí)現(xiàn)一個(gè)高性能的服務(wù)器。 C++構(gòu)建高性能Web服務(wù)器——Step 0:前言 一、想法: 一直想用C++做個(gè)項(xiàng)目,因?yàn)楸容^喜歡網(wǎng)絡(luò)通信這部分,又讓事情變得更有些挑戰(zhàn)性,我最終選擇實(shí)現(xiàn)一個(gè)高性能的Web服務(wù)器。 在宏觀上我希望TinyWeb能夠這樣: 配置簡(jiǎn)單 擴(kuò)展容易 性能...
摘要:為了便于您更清晰的理解的體系架構(gòu),在這里我將為您展示年開(kāi)發(fā)者知識(shí)圖譜,它包含了所有開(kāi)發(fā)過(guò)程中的關(guān)鍵部分。在數(shù)據(jù)展示前端導(dǎo)入導(dǎo)出圖表面板數(shù)據(jù)綁定等場(chǎng)景無(wú)需大量代碼開(kāi)發(fā)和測(cè)試,可極大節(jié)省企業(yè)研發(fā)成本并降低交付風(fēng)險(xiǎn)。 作為 Vue 的初學(xué)者,您或許已經(jīng)聽(tīng)過(guò)很多關(guān)于它的專業(yè)術(shù)語(yǔ)了,例如:?jiǎn)雾?yè)面應(yīng)用程序、異步組件、服務(wù)器端呈現(xiàn)等,您可能還聽(tīng)過(guò)和Vue經(jīng)常一起被提到的工具和庫(kù),如Vuex、Webp...
摘要:前端每周清單半年盤點(diǎn)之與篇前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開(kāi)發(fā)教程工程實(shí)踐深度閱讀開(kāi)源項(xiàng)目巔峰人生等欄目。與求同存異近日,宣布將的構(gòu)建工具由遷移到,引發(fā)了很多開(kāi)發(fā)者的討論。 前端每周清單半年盤點(diǎn)之 React 與 ReactNative 篇 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn);分為...
摘要:新聞熱點(diǎn)國(guó)內(nèi)國(guó)外,前端最新動(dòng)態(tài)蘋果開(kāi)源了版近日,蘋果開(kāi)源了一款基于事件驅(qū)動(dòng)的跨平臺(tái)網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā)框架,它有點(diǎn)類似,但開(kāi)發(fā)語(yǔ)言使用的是。蘋果稱的目標(biāo)是幫助開(kāi)發(fā)者快速開(kāi)發(fā)出高性能且易于維護(hù)的服務(wù)器端和客戶端應(yīng)用協(xié)議。 showImg(https://segmentfault.com/img/remote/1460000013677379); 前端每周清單專注大前端領(lǐng)域內(nèi)容,以對(duì)外文資料的...
閱讀 1849·2021-11-25 09:43
閱讀 1491·2021-09-02 15:21
閱讀 3453·2019-08-30 15:52
閱讀 1501·2019-08-30 12:48
閱讀 1295·2019-08-30 10:57
閱讀 2929·2019-08-26 17:41
閱讀 681·2019-08-26 11:59
閱讀 1366·2019-08-26 10:41