初見socket

? ? ? ? 一看socket這個(gè)東西,估計(jì)大部分人都不知道它為何物,哪怕就是IT行業(yè)做過幾年的人。然而你平時(shí)訪問網(wǎng)站,上個(gè)QQ,上個(gè)微信都是依靠著socket這東西。你們說它是多么默默無聞,又是多大貢獻(xiàn)。

初見socket

? ? ? ? socket我們可以理解為兩個(gè)應(yīng)用之間消息通訊的一條`電話線`,兩個(gè)軟件之間可以通過他來說話。然而我們平時(shí)兩個(gè)人說話的形式種類繁多,而socket也有兩種傳遞`說話`的方式,一種叫TCP/IP,一種叫UDP。tcp/ip這種形式就是兩個(gè)人說話之前,先提醒對(duì)方我們要準(zhǔn)備說話了喔,大家都留意聽哈,這樣子舊確保對(duì)方收到我們的消息。而UDP這種方式呢,就比較簡(jiǎn)單粗暴咯,就像說話直接就說,對(duì)方有沒有聽見我們并不知道。

socket與網(wǎng)站

? ? ? ? 也許你會(huì)說網(wǎng)站不是依靠http或者h(yuǎn)ttps嗎?對(duì)網(wǎng)站是依靠這兩個(gè)!然而這兩個(gè)東西卻是依賴這socket這幕后大功臣。我們平時(shí)訪問網(wǎng)頁是如何基于socket的呢?首先瀏覽器與服務(wù)器這兩個(gè)家伙建立一條通話線路(基于TCP/IP,確保大家數(shù)據(jù)不丟失~),然后只不過他們之間說話有自己的規(guī)則,每次說正文之前都要說一堆說明(這說明都是一行一行的,正文與這些說明隔了一個(gè)空行)。我們來偷聽一下他們的說明:

瀏覽器妹妹

GET / HTTP/1.1

Host: blog.yubangweb.com

Connection: keep-alive

Cache-Control: max-age=0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36

Accept-Encoding: gzip, deflate, sdch

Accept-Language: zh-CN,zh;q=0.8

上面是瀏覽器訪問我的博客的說明文字,我們翻譯成我們可接受的語言:

瀏覽器:hi,哥們,我們一切都走h(yuǎn)ttp1.1協(xié)議哈,我用GET這種訪問方式

瀏覽器:我訪問的主機(jī)名字叫blog.yubangweb.com哈

瀏覽器:我們要重復(fù)使用連接哈,后續(xù)還有很多話要說

瀏覽器:我要聽最新的話

瀏覽器:我可以接受一些什么方言(這是真的是方言,反正作者我不懂)

瀏覽器:(這句話我不知道干什么的)

瀏覽器:我是生活在linux系統(tǒng)的谷歌瀏覽器(自我介紹,O(∩_∩)O哈哈~)

瀏覽器:我可以接受縮寫(內(nèi)容壓縮)

瀏覽器:我要中文內(nèi)容(我也不懂英語~)

說完這些就說自己獨(dú)特的心里話了(post表單的內(nèi)容)

然后我們看看服務(wù)器哥如何回應(yīng)的:

HTTP/1.1 200 OK

Server: nginx/1.4.4

Date: Sat, 19 Mar 2016 05:42:37 GMT

Content-Type: text/html; charset=utf-8

Content-Length: 4904

Connection: keep-alive

windPlugCacheType: page_cache

Content-Encoding: gzip

Vary: Accept-Encoding, Cookie

windPlugCacheHit: on

X-Frame-Options: SAMEORIGIN

via: yq26.pyruntime

Set-Cookie: saeut=CkMPGl==; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/

服務(wù)器哥:你的訪問我接受了(200就是ok,如果500就是服務(wù)器哥自己炸了~)

服務(wù)器哥:我是大nginx(apache是前輩,nginx可以說是后起之秀)

服務(wù)器哥:這句話是什么時(shí)候說出口的

。。。。。。。。。。。

下面的對(duì)話都是這樣子的

當(dāng)說明都說完之后,瀏覽器哥就可以把一堆心里話跟瀏覽器妹妹說了,例如html頁面(各種各樣的經(jīng)歷),圖片(曾經(jīng)的回憶),文檔(自己的工作成品)。說完之后,一次愉快的談話就到此為止,通話線路可能就這樣子斷開,也有可能維持一段時(shí)間。


socket與文件傳輸

同樣的,文件發(fā)送方(A大姐)與文件接受方(B小弟)建立一條通訊電話線。

A大姐:B小弟,快接收一個(gè)文件,大小5000個(gè)字符,文件名叫`你的任務(wù).txt`,純文本來的

B小弟:報(bào)告A大姐,收到接收請(qǐng)求,來吧!

A大姐:。。。。。(5000個(gè)字符)

B小弟接收了5000個(gè)字符,保存在自己這里

B小弟:接收完成,謝謝

A大姐:ok

然后兩個(gè)家伙的通訊鏈路斷開,文件傳輸完成了(就是如此簡(jiǎn)單)


個(gè)人看法

在互聯(lián)網(wǎng)如此發(fā)達(dá)的今天,兩個(gè)軟件的交談也越發(fā)頻繁,不過我們見的一切其實(shí)就是和我們每天人與人談話一樣,只不過大家都有自己的說話習(xí)慣,有自己的表達(dá)方式。只要大家的交談方式一致就不會(huì)說像`雞同鴨講那樣子`。socket只是一條虛擬的電話線,交談還是靠自己的約定。


還是那一句,技術(shù)無味,產(chǎn)品振奮人心。我只想用最直白的話語說出最無味的底層技術(shù)。如果喜歡我的文章,點(diǎn)贊是對(duì)我對(duì)大的支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容