$$ 05 $$
牛郎接著說(shuō):“我將這套新的方案,叫做‘HTTP’。首先,明確幾個(gè)概念?!?p> “發(fā)送方發(fā)出的消息,我們稱(chēng)之為‘請(qǐng)求’,接收方返回的回應(yīng),我們稱(chēng)之為‘響應(yīng)’?!?p> “一個(gè)‘請(qǐng)求’,分為3部分,請(qǐng)求行,請(qǐng)求頭,請(qǐng)求體?!?p> “請(qǐng)求體,就是我要發(fā)送的內(nèi)容。如果文本過(guò)長(zhǎng),請(qǐng)喜鵲們按一百字左右拆分就好,每個(gè)我們稱(chēng)為一個(gè)‘包’,注意進(jìn)行編號(hào)?!?p> “請(qǐng)求頭,是對(duì)整個(gè)請(qǐng)求的概括,以及一些輔助信息。主要包含總字?jǐn)?shù),拆分的包數(shù)目,用于接收方重組原始文本?!?p> “請(qǐng)求行,只要2點(diǎn)信息,版本,接收者。目前版本固定為1.1,后面可能升級(jí),不同版本將對(duì)應(yīng)不同的解析策略。”
·
“喜鵲拿到我要發(fā)送的內(nèi)容,自動(dòng)拆分為這3部分,請(qǐng)求行與請(qǐng)求頭隨第一個(gè)請(qǐng)求體發(fā)出?!?p> “接收的喜鵲通過(guò)請(qǐng)求行與請(qǐng)求頭,確認(rèn)總的包數(shù)量,按照編號(hào)組裝文本,然后校驗(yàn)組裝好的文本是否與請(qǐng)求頭的字?jǐn)?shù)一致?!?p> “這中間可能有丟包,比如一共10個(gè)包,3號(hào)包一直沒(méi)來(lái),那么,你們自行重傳就好。”
“最終,把整合好且確認(rèn)無(wú)誤的信息傳遞給織女,才算是完成了任務(wù)?!?p> ·
“請(qǐng)求行和請(qǐng)求頭是給喜鵲看的,我和織女真正關(guān)系的是請(qǐng)求體?!?p> “‘響應(yīng)’的結(jié)構(gòu)與之完全一樣,這里不重復(fù)了。”
“當(dāng)一個(gè)‘請(qǐng)求’成功發(fā)出,一個(gè)‘響應(yīng)’成功回來(lái)時(shí),一次HTTP通信則算完美成功。否則,任意一步出錯(cuò),都將進(jìn)行重試?!?p> ·
----
$$ 06 $$
小艾皺了皺眉頭,看著牛郎,說(shuō):“意思我理解,但總覺(jué)得,喜鵲做的事情,越來(lái)越多越來(lái)越亂了,好像有些失去條理了。”
牛郎與之相視一笑,說(shuō):“哈哈,我早就想到,你們可能有這樣的疑惑了。所以,讓我來(lái)給你們‘有條理地解釋一下’吧!”
·
牛郎起身,走到旁邊的桌子旁,拿起紙筆,回到茶桌一遍畫(huà)一邊講解:
“看似所有的事情都交付喜鵲們執(zhí)行,但是,這里面,確實(shí)可以分為4個(gè)層面的。讓我們從下往上說(shuō)?!?p> “首先,一切都是基于喜鵲可以飛行并向附近喜鵲傳遞信息這一基礎(chǔ)。這是整個(gè)通信鏈路的根基,沒(méi)有它就沒(méi)有這一切。我們稱(chēng)之為‘鏈路層’?!?p> “其次,是根據(jù)IP尋找并準(zhǔn)確與每一只喜鵲溝通,從而形成喜鵲網(wǎng)絡(luò)。這一層,稱(chēng)為‘網(wǎng)絡(luò)層’?!?p> “接著,就是之前通過(guò)TCP傳輸數(shù)據(jù),從而形成穩(wěn)定的傳輸通路。因此,這里稱(chēng)之為‘傳輸層’?!?p> “最后,是基于傳輸?shù)膬?yōu)化與應(yīng)用,是文本等信息傳輸?shù)淖罱K解決方案,這也就是‘應(yīng)用層’了?!?p> ·
“這就是目前的‘四層網(wǎng)絡(luò)模型’。怎么樣,兩位,理清思緒了嗎?”
小艾和小皮仿佛醍醐灌頂:“聽(tīng)君一席話,勝讀十年書(shū)!這個(gè)簡(jiǎn)直太強(qiáng)了!是我們之前想的太簡(jiǎn)單了?!?p> 小艾繼續(xù)說(shuō)道:“唉,要是能有人像這樣透徹地講解法術(shù),說(shuō)不定我和小皮就能更上一層樓了。”
牛郎無(wú)意說(shuō)道:“傳言說(shuō)有兩只連低級(jí)法術(shù)都只學(xué)了個(gè)皮毛的廢柴神仙……”
小皮那柔弱的拳頭已經(jīng)落在了牛郎的頭上:“你可以閉嘴了……”
·
----
$$ 07 $$
“牛郎失言,咱們接著聊優(yōu)化的事情?!迸@山o小艾和小皮滿上茶水,繼續(xù)說(shuō)道:
“接下來(lái),咱們說(shuō)說(shuō)多個(gè)請(qǐng)求的優(yōu)化?!?p> “之前,是每一個(gè)‘請(qǐng)求-響應(yīng)’,都會(huì)對(duì)應(yīng)一套‘握手-揮手’流程?!?p> ·
“而優(yōu)化的核心就是,在一次‘握手’撿來(lái)連接之后,允許發(fā)送多個(gè)‘請(qǐng)求’。我稱(chēng)之為‘連接復(fù)用’,或者叫做‘長(zhǎng)連接’?!?p> “具體的做法是這樣的?!?p> “一次請(qǐng)求發(fā)送后,不要立即進(jìn)行‘揮手’,而是等待1個(gè)小時(shí)之后,再進(jìn)行‘揮手’關(guān)閉連接?!?p> “在這一個(gè)小時(shí)內(nèi),如果有新的請(qǐng)求要發(fā)送,那么,就直接復(fù)用原來(lái)已經(jīng)‘握手’成功的連接即可,并重置1小時(shí)的等待時(shí)間?!?p> “這樣,我們減少了‘握手-揮手’次數(shù),從而減少了資源消耗?!?p> ·
“當(dāng)然,穩(wěn)定性方面也不會(huì)打折扣的,因?yàn)橹敖⑦^(guò)連接,所以復(fù)用該連接,大概率是通暢的?!?p> “當(dāng)然,也一定會(huì)存在復(fù)用時(shí)連接中斷的情況,此時(shí),就需要重新‘握手’建立連接了?!?p> ·
這時(shí),小艾突然問(wèn)道:“既然如此,何必1小時(shí)后揮手關(guān)閉呀,為什么不一直保持連接呢?”
“好問(wèn)題!”牛郎夸贊道,“但是,一直維持連接,對(duì)于鏈路上的喜鵲,也是一種浪費(fèi)?!?p> “而且,由于王母的攔截,連接的長(zhǎng)時(shí)間維護(hù)很難,必然中斷概率很高,下次可能還免不了新建連接?!?p> “再者,若長(zhǎng)時(shí)間不進(jìn)行請(qǐng)求發(fā)送,那么維護(hù)連接的成本,遠(yuǎn)比新建連接的成本要高得多?!?p> ·
----
$$ 08 $$
牛郎拍了拍手:“好了,理論都講完了,接下來(lái)該干活了!”
小艾與小皮沒(méi)有動(dòng),也沒(méi)有說(shuō)話。
·
小艾看著疲憊的牛郎,輕聲問(wèn)道:“這樣值得嗎?”
牛郎愣了一下,旋即堅(jiān)定的回答:“值得?!?p> 接著,牛郎低下頭,許久的沉默后,牛郎低聲說(shuō)道:
“我從不否認(rèn)自己的目標(biāo),也對(duì)自己所邁出的每一步堅(jiān)定不移?!?p> “只是,有時(shí)候我也會(huì)迷茫,仿佛看不到這一切的未來(lái)。”
“我只是一介凡人而已,我不知道如何讓王母真正承認(rèn)自己?!?p> “天數(shù)契約可能只是個(gè)開(kāi)始,即使我完成了,王母之后肯定也不會(huì)善罷甘休的……”
聲音有些聽(tīng)不清了,夾雜著那強(qiáng)忍住的啜泣。
·
小艾輕輕拍了拍牛郎的肩膀,說(shuō):“你有沒(méi)有想過(guò),像我們一樣,踏上仙途?”
牛郎沒(méi)有回答。小艾與小皮也沒(méi)有繼續(xù)追問(wèn)。
·
“我們先走了,HTTP相關(guān)的事情,一定會(huì)辦好的。不用送了,你也多保重。”小艾和小皮起身告別。
“再見(jiàn)?!迸@蓳]手告別,然后繼續(xù)低下頭,陷入了沉思中。
·
星夜,牛郎的內(nèi)心獨(dú)白。
“我本想沿著通信學(xué)專(zhuān)家的路線,一直走下去的。”
“我本想繼續(xù)研究第三代HTTP協(xié)議,本想接下來(lái)與織女一起探索通信加密的奧妙?!?p> “但是,我所做的這么多研究,沒(méi)人關(guān)注,沒(méi)人點(diǎn)贊,沒(méi)什么閱讀量,讓我好傷心啊……”
“所以,是時(shí)候做出一些改變了……”
雖然很遺憾,但是,我們?cè)僖不夭坏竭^(guò)去了。