新聞中心
第0x00天

上帝看到了人類制造的各種規(guī)格的電腦設(shè)備,也組建了一些規(guī)模極小的、各種各樣的網(wǎng)絡(luò),卻沒有辦法把它們連接起來使用,很是傷心。
晚上,上帝就給溫頓·瑟夫托夢(mèng),告訴他怎么樣在一個(gè)不可靠的網(wǎng)絡(luò)環(huán)境下可靠地傳輸數(shù)據(jù),又托夢(mèng)給鮑勃·卡恩,告訴他如何給每個(gè)主機(jī)分配一個(gè)“門牌號(hào)”, 如何兼容底層協(xié)議多樣的網(wǎng)絡(luò)......
第二天,溫頓·瑟夫和鮑勃·卡恩見面以后,交流了一下晚上所做的奇怪的夢(mèng),覺得這些天一直思考的問題迎刃而解,不僅大聲叫道:感謝上帝!
于是,TCP/IP誕生了。
有了TCP/IP的支持,大家可以跨越各個(gè)子網(wǎng)互相發(fā)送郵件(SMTP),可以從遠(yuǎn)程的機(jī)器上下載文件(FTP),還可以登陸到遠(yuǎn)程的機(jī)器上去操作(Telnet), 人類非常高興。
第0x01天
上帝看到人類很容易滿足,有點(diǎn)失望,直到他注意到一個(gè)叫做蒂姆·伯納斯·李的小伙子。這個(gè)小伙子孜孜不倦地在追求一件事情: 把每個(gè)電腦中的文檔給連接起來。
晚上,上帝決定故伎重演,在夢(mèng)里告訴了蒂姆·伯納斯·李“超文本”的秘密, 并且特別囑咐他要買一臺(tái)NeXT計(jì)算機(jī)作為服務(wù)器,因?yàn)樯系弁蓱z那個(gè)被趕出蘋果公司的家伙: Steve Jobs。
蒂姆·伯納斯·李醒來后十分激動(dòng),都忘了說“感謝上帝!”,馬上就投入了HTTP協(xié)議的制定當(dāng)中。他果然買了一臺(tái)NeXT計(jì)算機(jī),還在上面貼了一張紙: 別關(guān)機(jī),這是一臺(tái)服務(wù)器!
服務(wù)器可是一個(gè)新鮮玩意兒,當(dāng)時(shí)的計(jì)算機(jī),性能非常低下,很難維持成千上萬個(gè)來自瀏覽器的連接。
更重要的是,人類用瀏覽器訪問服務(wù)器,僅僅為了把服務(wù)器的靜態(tài)文件給下載到本地閱讀,于是蒂姆·伯納斯·李把HTTP設(shè)計(jì)成了無狀態(tài)的協(xié)議! 這嚴(yán)重違背了上帝的教導(dǎo)。
每次瀏覽器訪問服務(wù)器上的網(wǎng)頁,都會(huì)建立一個(gè)TCP連接,等到數(shù)據(jù)傳輸完成,立刻就關(guān)閉連接。每次請(qǐng)求之間毫無關(guān)聯(lián)。
上帝有點(diǎn)兒生氣,想再給蒂姆·伯納斯·李托夢(mèng),但轉(zhuǎn)念一想: 費(fèi)那勁兒干嘛,讓人類自己醒悟吧!
第0x02天
HTTP迅速普及,在Mosaic,網(wǎng)景等瀏覽器的推波助瀾下,人們紛紛上網(wǎng)。
如上帝所料, Web越來越繁榮,各種各樣的網(wǎng)站雨后春筍般出現(xiàn),交互性越來越強(qiáng),動(dòng)態(tài)性越來越高,那些單純的,以瀏覽靜態(tài)網(wǎng)頁為目的的網(wǎng)站已經(jīng)極少了。
人類中的程序員發(fā)現(xiàn),蒂姆·伯納斯·李發(fā)明的HTTP協(xié)議實(shí)在是笨拙:每次請(qǐng)求,都得打開一個(gè)連接,用完就關(guān),下一個(gè)請(qǐng)求,又得開新的連接,在需要高度交互的系統(tǒng)(如聊天、游戲)中浪費(fèi)至極。
這一次,上帝找不到托夢(mèng)的人,只好給整個(gè)W3C的網(wǎng)絡(luò)專家組托夢(mèng): 要節(jié)約,別浪費(fèi),要在一個(gè)TCP連接中發(fā)送多個(gè)HTTP請(qǐng)求!
這就是keep-alive。
程序員們高興了幾天后,很快又發(fā)現(xiàn),即使是keep-alive, 每次HTTP請(qǐng)求都得發(fā)送HTTP Header,還是浪費(fèi)。
更要命的是蒂姆·伯納斯·李設(shè)計(jì)的HTTP協(xié)議都是由瀏覽器發(fā)起請(qǐng)求,服務(wù)器來響應(yīng)。 現(xiàn)在服務(wù)器的數(shù)據(jù)有了變化,想主動(dòng)告訴瀏覽器,該怎么辦?
有的程序員想出了不斷輪詢的辦法,讓瀏覽器不斷去問服務(wù)器,數(shù)據(jù)有變化沒有? 數(shù)據(jù)有變化沒有?
上帝看到這種情景,不由得笑了:可憐的人類,不聽老人言,吃虧在眼前吧!
第0x03天
上帝給Sun公司的Games Gosling托夢(mèng), 讓他創(chuàng)建了Java。
Games Gosling 為了推廣Java, 想出了一個(gè)不錯(cuò)的點(diǎn)子, 在瀏覽器中安裝了一個(gè)插件, 通過插件可以運(yùn)行Java程序。既然是Java程序, 就可以直接和服務(wù)器建立Socket連接,在這個(gè)連接中,自然是想做什么事情就做什么事情,服務(wù)器也可以主動(dòng)給瀏覽器發(fā)送數(shù)據(jù),效率極高, 完全拋棄了HTTP協(xié)議。
這就是Applet。
但是Applet實(shí)在是不爭(zhēng)氣, 再加上各個(gè)瀏覽器也不斷使壞, 就成會(huì)出現(xiàn)這種情況:
或者干脆是這種情況:
第0x04天
上帝驚奇地發(fā)現(xiàn)了Macromedia這個(gè)公司,它獨(dú)辟蹊徑,創(chuàng)造了一個(gè)叫做Flash的東西, 非常適合做小動(dòng)畫。
(小小作品:火柴人打斗)
雖然也和Applet一樣需要在瀏覽器安裝一個(gè)插件,但是各大“流氓”瀏覽器居然都支持。
有了插件的支持,瀏覽器的所有限制都不復(fù)存在, Flash也可以直接和后端的服務(wù)器用Socket進(jìn)行雙向通信。
可惜的是這Flash壽命不長久,尤其是和上帝鐘愛的Jobs干了一架以后,慢慢地走上了不歸路。
后來,連Jobs也被上帝帶走了。
第0x05天
讓上帝沒有料到的是,隨著Applet和Flash的消亡,JavaScript慢慢地發(fā)展成了前端之王,統(tǒng)治了瀏覽器。
但是由于HTTP協(xié)議的限制,服務(wù)器還是無法直接給瀏覽器推送數(shù)據(jù)。
人類的不滿情緒慢慢累積:“這HTTP用起來這么麻煩, 能不能讓我們JavaScript直接創(chuàng)建Socket去訪問服務(wù)器啊,這樣的話HTTP的一切問題都解決了!”
上帝心中暗喜,人類終于上道了, 但是上帝也清楚,在瀏覽器中直接使用JavaScript去創(chuàng)建Socket和服務(wù)器雙向通信是一件吃力不討好的事情, 比如:
1. Socket是個(gè)非常"低級(jí)"的通信方式,是基于Stream的,不是基于消息的。每個(gè)應(yīng)用的通信雙方必須自定義數(shù)據(jù)格式,處理粘包、分包的問題。
2. 如果想實(shí)現(xiàn)安全的通信,程序員必須自己來實(shí)現(xiàn)類似與Https的那一套機(jī)制,對(duì)稱加密,非對(duì)稱加密,消息摘要,數(shù)字證書 ......
于是上帝再次托夢(mèng),這一次他找到了Michael Carter,告訴他:“汝要帶領(lǐng)大家,基于TCP協(xié)議,在應(yīng)用層實(shí)現(xiàn)一套新的協(xié)議,要像Socket那樣, 讓瀏覽器和服務(wù)器可以雙向通信;還要像HTTP那樣讓程序員容易使用,別在讓程序員去處理那些低級(jí)的、麻煩的粘包問題/安全問題。”
Michael Carter 醒來后非常激動(dòng),他決定把新的協(xié)議叫做: web socket !
第0x06天
上帝托夢(mèng)太多,他決定休息一下,人類也休息了一天。
這就是星期天的來歷。
【本文為專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過作者微信公眾號(hào)coderising獲取授權(quán)】
本文名稱:網(wǎng)絡(luò)創(chuàng)世紀(jì)
本文鏈接:http://m.fisionsoft.com.cn/article/djcesjg.html


咨詢
建站咨詢
