久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

帶你手?jǐn)]一個(gè)http服務(wù)器(帶源碼)

2021-02-01    分類: 網(wǎng)站建設(shè)

作為一個(gè)程序猿,對(duì)造輪子這事情可以說(shuō)是情有獨(dú)鐘,幾乎

  • 精通JAVA,Python,熟練掌握C++
  • 精通Redis,Memcached,Mysql
  • 精通Nginx配置,模塊開(kāi)發(fā)
  • 精通Kafka,ActiveMQ 等消息隊(duì)列
  • 精通常用數(shù)據(jù)結(jié)構(gòu)和算法
  • 精通網(wǎng)絡(luò)編程,多線程編程技術(shù),高性能服務(wù)器技術(shù)
  • 精通tcp/ip協(xié)議棧,熟悉內(nèi)核網(wǎng)絡(luò)子系統(tǒng)代碼
  • 精通nginx代碼及模塊開(kāi)發(fā)
    • 上面每一條都涉及好多輪子,每一個(gè)都是精通,如果真能做到。那這個(gè)人可以說(shuō)是碼農(nóng)中的戰(zhàn)斗機(jī)。

      那我們現(xiàn)在目標(biāo)就是去做這個(gè)戰(zhàn)斗機(jī)。而這個(gè)方法,就是自己去造輪子,造的目的不是為了在項(xiàng)目中使用自己造的輪子,而是為了去了解輪子的構(gòu)造,然后自己動(dòng)手去體會(huì)造輪子的過(guò)程。


    • 抗在最前面的:LVS,F(xiàn)5,HAProxy這類負(fù)載均衡
    • 接下來(lái)有Nginx,Apache,Lighttpd這類Http服務(wù)
    • http服務(wù)后則是各種容器,部署著我們的業(yè)務(wù)邏輯
    • 存儲(chǔ)這邊有Redis,Memcached這一類KV存儲(chǔ)器和緩存系統(tǒng)
    • 如果是多機(jī)部署,肯定還有Kafka,ActiveMQ這種負(fù)責(zé)解耦的消息隊(duì)列
    • 為了實(shí)現(xiàn)集群通信,肯定少不了Thrift這種RPC框架和Protobuf這種序列化技術(shù)
    • 再高端點(diǎn),到了分布式領(lǐng)域了,就是更多的輪子了。。zookeeper、raft等等
    • 還有大數(shù)據(jù)系列hadoop。spark。。。。。
      • 本文主要講http協(xié)議。

        正文分割線


        我們都知道http是基于tcp之上的,那我們現(xiàn)在就自己基于tcp來(lái)實(shí)現(xiàn)一個(gè)最小的http服務(wù),功能非常簡(jiǎn)單:

        • 返回輸入?yún)?shù)

        先來(lái)看請(qǐng)求格式:


        http的報(bào)文大概分為3部分:

        • 請(qǐng)求行
        • 首部
        • 正文部分

        此處請(qǐng)求行是格式是固定的,

        先寫代碼來(lái)看看的:


        可以看到我們讀取的到數(shù)據(jù)是如上,我們可以看到格式上是符合的。

        Ps:上面這個(gè)代碼有個(gè)小問(wèn)題,因?yàn)閠cp連接是字節(jié)流的,我們通過(guò)readAll方法從連接中讀取數(shù)據(jù)的是,只要瀏覽器上不主動(dòng)斷開(kāi),會(huì)一直阻塞在readaALL上。。。

        上面我們將收到的數(shù)據(jù)稍微整理下

        • 請(qǐng)求行
        • POST / HPPP/1.1
        • 格式:方法 space URL space 版本 cr lf
        • 首部
        • Host: 127.0.0.1:8080
        • Content-length: 0
        • 格式:首部字段名 space 字段值 cr lf
        • 正文部分
        • 此處為空

        上面首部中Content-length: 0可以說(shuō)是非常關(guān)鍵,他告訴了我們應(yīng)該要在兩個(gè) 后繼續(xù)讀取多少字節(jié)。

        下面我們開(kāi)始來(lái)寫解析代碼,先是解析文件頭


        然后我們?cè)俳馕鍪撞?/p>

        解析完后,我們?cè)趯懛祷刂担祷貓?bào)文的格式放下:


        下面是返回值的代碼:


        完整的例子可以看GitHub上代碼,歡迎star

        https://github.com/zhuanxuhit/go-in-practice/tree/master/wheel/http/v1

        我們有了第一版http輪子后,我們能和前面介紹的輪子系列:rpc聯(lián)系起來(lái),在rpc系列中,我們講了設(shè)計(jì)通信協(xié)議來(lái)傳遞消息,此處http是通過(guò)頭部的url+method的方法來(lái)表示我要調(diào)用服務(wù)端哪個(gè)方法,然后分割符是使用 ,連續(xù)兩個(gè) 表示后續(xù)是消息體,為了高速我們消息體的大小和格式,在header中必須指明content-type和content-length,這些都是在我們?cè)趯?shí)現(xiàn)http協(xié)議的時(shí)候遵循的。

        那現(xiàn)在寫完最初版代碼,我們回過(guò)頭總結(jié)下我們之前做的rpc輪子,數(shù)據(jù)編碼采用了protobuf,然后基于tcp自己定義了一套消息協(xié)議,其實(shí)做的事情跟http/1.1是一樣的,我們完全可以在http通信的時(shí)候,將content-type設(shè)置為protobuf,然后通信雙方雙方能夠編解碼即可。

        在實(shí)現(xiàn)過(guò)程中,我們發(fā)現(xiàn)如果用http1.1作為通信協(xié)議,有什么問(wèn)題呢?

        1. 每次傳輸都要完整的http頭,浪費(fèi)帶寬
        2. 每次一個(gè)http請(qǐng)求,一個(gè)request,response都要獨(dú)占一條tcp連接,不然不知道response對(duì)應(yīng)哪個(gè)request,影響實(shí)時(shí)性和并發(fā)性

        那上面這兩點(diǎn)都是要解決的問(wèn)題,在http2.0中都有相應(yīng)的方案

        1. 針對(duì)每次都需要傳輸http頭,通信雙方建立索引,后續(xù)傳輸只用索引
        2. 針對(duì)連接占用,一條連接只能同時(shí)有一個(gè)請(qǐng)求-響應(yīng),http2.0啟動(dòng)了多路復(fù)用,即允許一個(gè)連接同時(shí)發(fā)起多個(gè)請(qǐng)求

        那怎么能做到一個(gè)連接同時(shí)發(fā)起多個(gè)請(qǐng)求呢?通信雙方就必須對(duì)每個(gè)請(qǐng)求進(jìn)行編碼,這樣不同的響應(yīng)就能和請(qǐng)求對(duì)應(yīng)上了。

        具體可以看兩張圖:


        HTTP 2.0 其實(shí)是將三個(gè)請(qǐng)求變成三個(gè)流,將數(shù)據(jù)分成幀,亂序發(fā)送到一個(gè)tcp連接中


        通過(guò)stream對(duì)不同請(qǐng)求進(jìn)行區(qū)分,然后在將一個(gè)消息拆分為多個(gè)幀進(jìn)行發(fā)送。

        那http2.0后,還能不能更快了呢?于是就有了QUIC協(xié)議,這個(gè)協(xié)議肯定是為了解決http2.0的某些問(wèn)題的。

        1. 自定義連接機(jī)制:tcp連接三次握手慢,由于在移動(dòng)端,由于網(wǎng)絡(luò)從wifi到移動(dòng)網(wǎng)絡(luò)切換時(shí),必定會(huì)導(dǎo)致連接斷開(kāi)重連,再次需要3次握手,那我們就自定義連接機(jī)制,原先tcp一條連接是由4元素組成:分別是源 IP、源端口、目的 IP、目的端口,現(xiàn)在以一個(gè)64位隨機(jī)數(shù)來(lái)作為連接標(biāo)志,斷開(kāi)了也沒(méi)事,重新建立連接不需要3次握手了。
        2. 自定義重傳機(jī)制:tcp是可靠連接,當(dāng)前面的數(shù)據(jù)編號(hào)沒(méi)有收到的時(shí)候,后面的數(shù)據(jù)即使收到了,也不會(huì)得到確認(rèn),這就必須要重傳

        重傳有個(gè)測(cè)不準(zhǔn)問(wèn)題,左邊是1.1,我們發(fā)現(xiàn)重發(fā)100編號(hào)的時(shí)候,如果后續(xù)收到應(yīng)答101,我們不知道這個(gè)是針對(duì)第一次100的應(yīng)答還是第二次重傳100的應(yīng)答,http2.0則定義了每次發(fā)送數(shù)據(jù),編號(hào)都需要增加,然后通過(guò)offset來(lái)標(biāo)明數(shù)據(jù)的前后續(xù)關(guān)系。

        1. 無(wú)阻塞多路復(fù)用:因?yàn)閠cp是面向字節(jié)流的可靠連接,所以數(shù)據(jù)之間是有依賴的,因此為了減少依賴,讓不同流之間真的能夠獨(dú)立,可以采用udp
        2. 自定義流量控制:tcp的流量控制是通過(guò)滑動(dòng)窗口協(xié)議,udp也是滑動(dòng)窗口,而且是每個(gè)stream都有自己的窗口。

        總結(jié)

        首先本文基于tcp自己實(shí)現(xiàn)了http1.1的協(xié)議,實(shí)現(xiàn)中發(fā)現(xiàn)這個(gè)通信協(xié)議和我們之前輪子系列文章rpc都是消息協(xié)議,只是對(duì)消息體的編碼格式不同而已。

        接著我們?cè)谧约簩懙倪^(guò)程中發(fā)現(xiàn)了http1.1的種種問(wèn)題,針對(duì)這些問(wèn)題有了http2.0,繼而又有了QUIC。

        分享標(biāo)題:帶你手?jǐn)]一個(gè)http服務(wù)器(帶源碼)
        文章位置:http://www.js-pz168.com/news9/98659.html

        成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)做網(wǎng)站、App開(kāi)發(fā)、營(yíng)銷型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、虛擬主機(jī)

        廣告

        聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

        成都seo排名網(wǎng)站優(yōu)化
        久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
        5566av亚洲| 色综合久久久网| 在线观看日韩一区| 精品国产三级a在线观看| 亚洲欧美激情插 | 欧美日韩免费高清| 欧美日韩一卡二卡三卡| 日本一区二区成人| 日本强好片久久久久久aaa| 91丨九色丨尤物| 亚洲一区二区三区加勒比| 日韩一二在线观看| 亚洲国产一区二区在线播放| 国产iv一区二区三区| 欧美少妇一区| 欧美丰满一区二区免费视频| 18欧美乱大交hd1984| 国产精品一二三四区| 欧美日韩在线一二三| 日韩一级片在线观看| 亚洲伊人伊色伊影伊综合网| caoporen国产精品视频| 亚洲一区二区三区加勒比 | 欧美日韩一区成人| 最近日韩中文字幕| 国产69精品久久777的优势| 热re99久久精品国99热蜜月| 欧美成人精品3d动漫h| 午夜伊人狠狠久久| www.成人av.com| 欧美日韩国产a| 亚洲精品国产a久久久久久| 国产98色在线|日韩| 特级西西444www大精品视频| 久久久99精品久久| 老鸭窝一区二区久久精品| 久久艳妇乳肉豪妇荡乳av| 欧美一级电影网站| 日韩一区精品视频| 狠狠干一区二区| 欧美一级二级在线观看| 日韩中文欧美在线| 精品国产一区二区三区麻豆免费观看完整版 | 天天爽夜夜爽夜夜爽精品视频| 91久久国产自产拍夜夜嗨| 欧美日免费三级在线| 一区二区三区蜜桃| 99精品国产高清一区二区| 欧美日本一区二区三区| 亚洲综合丝袜美腿| 国产chinese精品一区二区| 欧美二区三区91| 日韩中文欧美在线| 欧美日韩国产精品一区二区| 国产日韩欧美在线一区| 国产成人在线影院| 91精品1区2区| 亚洲成人www| 久久99导航| 2023国产一二三区日本精品2022| 紧缚捆绑精品一区二区| 亚洲午夜激情| 亚洲欧美激情在线| 国产伦精品一区二区三区视频黑人| 日韩女优视频免费观看| 久久国产精品免费| 伊人久久青草| 一区二区久久久久| 久精品国产欧美| 欧美高清在线精品一区| k8久久久一区二区三区| 911精品国产一区二区在线| 日本视频一区二区三区| 亚洲精品第一区二区三区| 综合久久久久久| 成人影片在线播放| 2020国产精品自拍| 成人国产精品免费观看动漫| 欧美日本韩国一区二区三区视频| 日韩综合一区二区| 亚洲春色在线视频| 亚洲一区在线视频观看| 久久精品magnetxturnbtih| 国产欧美日韩亚州综合| 91在线观看视频| 精品福利av导航| 成人高清免费在线播放| 欧美一区二区网站| 国产精品一区专区| 欧美高清视频一二三区 | 国产精品一区二区视频| 欧美日韩中文字幕一区二区| 免费观看在线色综合| 色综合一区二区| 天天综合网 天天综合色| 亚洲欧美丝袜| 日韩精品福利网| 色先锋aa成人| 蜜臀精品一区二区三区在线观看 | 中文字幕日韩欧美一区二区三区| 国产高清在线精品一区二区三区| 国产亚洲女人久久久久毛片| 91国产在线免费观看| 国产亚洲精久久久久久| 91浏览器入口在线观看| 日本一区二区电影| 国产伦视频一区二区三区| 中文字幕+乱码+中文字幕一区| 肥熟一91porny丨九色丨| 国产精品天干天干在线综合| 国产伦精品一区二区三区在线| 国产精品传媒视频| 精品一区二区国产| 亚洲精品美国一| 亚洲精品国产系列| 日韩av网站在线观看| 欧美写真视频网站| 国产久卡久卡久卡久卡视频精品| 日韩一区二区在线观看| jlzzjlzz国产精品久久| 国产三级一区二区| 好看的日韩精品| 亚洲一二三专区| 在线观看亚洲成人| 国产美女视频91| 欧美精品一区二区三区蜜臀| 国产精品12| 一区二区三区精品| 91福利精品第一导航| 国产精品一区2区| 久久人人超碰精品| 久久久99国产精品免费| 亚洲成人av福利| 欧美亚洲国产一区二区三区| 国产成人av福利| 欧美激情在线看| 日韩欧美视频第二区| 免费观看在线综合| 日韩美女在线视频| 国产在线精品一区二区三区| 亚洲综合成人在线视频| 在线欧美小视频| 成人av手机在线观看| 国产精品福利一区二区三区| 水蜜桃亚洲精品| 国产乱人伦精品一区二区在线观看 | 国产乱人伦精品一区二区| 亚洲一区二区欧美激情| 欧美探花视频资源| 99国产欧美另类久久久精品| 日韩美女精品在线| 色欧美88888久久久久久影院| 国产xxx精品视频大全| 欧美激情综合在线| 亚洲精品国产精品久久| 黄网站免费久久| 国产日韩亚洲欧美综合| 亚洲国产综合自拍| 国产精品亚洲人在线观看| 国产精品天美传媒沈樵| 一个色的综合| 成人免费视频一区二区| 亚洲欧美另类在线| 欧美日韩在线一区二区| 91高跟黑色丝袜呻吟在线观看| 亚洲一区二区美女| 3d动漫精品啪啪一区二区竹菊| 国产精品三区在线| 人禽交欧美网站| 久久久久久久网| 天堂精品一区二区三区| 国产凹凸在线观看一区二区| 亚洲色图视频免费播放| 欧美性大战久久| 国产精品香蕉视屏| 麻豆极品一区二区三区| 欧美激情一区二区三区在线| 中文字幕中文字幕99| 99国内精品久久| 丝袜诱惑亚洲看片| 精品国产伦一区二区三区免费 | 波多野结衣中文字幕一区| 一区二区免费在线播放| 欧美一二三区在线观看| 热re99久久精品国99热蜜月| 国产精品综合一区二区| 亚洲激情av在线| 欧美一区二区啪啪| 欧美一卡2卡3卡4卡无卡免费观看水多多| 久久99精品一区二区三区| 国产精品久久久久久一区二区三区| 色哟哟日韩精品| 国产精品对白一区二区三区| 久久精品久久精品| **性色生活片久久毛片| 69av一区二区三区| 水蜜桃一区二区三区| 91在线视频在线| 蜜臀久久99精品久久久画质超高清| 国产精品嫩草久久久久|