? ? ? ? 一看socket這個東西殴边,估計大部分人都不知道它為何物,哪怕就是IT行業(yè)做過幾年的人挚躯。然而你平時訪問網(wǎng)站,上個QQ擦秽,上個微信都是依靠著socket這東西码荔。你們說它是多么默默無聞,又是多大貢獻感挥。
初見socket
? ? ? ? socket我們可以理解為兩個應(yīng)用之間消息通訊的一條`電話線`缩搅,兩個軟件之間可以通過他來說話。然而我們平時兩個人說話的形式種類繁多触幼,而socket也有兩種傳遞`說話`的方式硼瓣,一種叫TCP/IP,一種叫UDP置谦。tcp/ip這種形式就是兩個人說話之前堂鲤,先提醒對方我們要準備說話了喔,大家都留意聽哈媒峡,這樣子舊確保對方收到我們的消息瘟栖。而UDP這種方式呢,就比較簡單粗暴咯丝蹭,就像說話直接就說慢宗,對方有沒有聽見我們并不知道坪蚁。
socket與網(wǎng)站
? ? ? ? 也許你會說網(wǎng)站不是依靠http或者https嗎?對網(wǎng)站是依靠這兩個镜沽!然而這兩個東西卻是依賴這socket這幕后大功臣敏晤。我們平時訪問網(wǎng)頁是如何基于socket的呢?首先瀏覽器與服務(wù)器這兩個家伙建立一條通話線路(基于TCP/IP缅茉,確保大家數(shù)據(jù)不丟失~)嘴脾,然后只不過他們之間說話有自己的規(guī)則,每次說正文之前都要說一堆說明(這說明都是一行一行的蔬墩,正文與這些說明隔了一個空行)译打。我們來偷聽一下他們的說明:
瀏覽器妹妹
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拇颅,哥們奏司,我們一切都走http1.1協(xié)議哈,我用GET這種訪問方式
瀏覽器:我訪問的主機名字叫blog.yubangweb.com哈
瀏覽器:我們要重復使用連接哈樟插,后續(xù)還有很多話要說
瀏覽器:我要聽最新的話
瀏覽器:我可以接受一些什么方言(這是真的是方言韵洋,反正作者我不懂)
瀏覽器:(這句話我不知道干什么的)
瀏覽器:我是生活在linux系統(tǒng)的谷歌瀏覽器(自我介紹,O(∩_∩)O哈哈~)
瀏覽器:我可以接受縮寫(內(nèi)容壓縮)
瀏覽器:我要中文內(nèi)容(我也不懂英語~)
說完這些就說自己獨特的心里話了(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ù)器哥:這句話是什么時候說出口的
。鸵熟。副编。。流强。痹届。。煮盼。短纵。。僵控。
下面的對話都是這樣子的
當說明都說完之后香到,瀏覽器哥就可以把一堆心里話跟瀏覽器妹妹說了,例如html頁面(各種各樣的經(jīng)歷)报破,圖片(曾經(jīng)的回憶)悠就,文檔(自己的工作成品)。說完之后充易,一次愉快的談話就到此為止梗脾,通話線路可能就這樣子斷開,也有可能維持一段時間盹靴。
socket與文件傳輸
同樣的炸茧,文件發(fā)送方(A大姐)與文件接受方(B小弟)建立一條通訊電話線瑞妇。
A大姐:B小弟,快接收一個文件梭冠,大小5000個字符辕狰,文件名叫`你的任務(wù).txt`,純文本來的
B小弟:報告A大姐控漠,收到接收請求蔓倍,來吧!
A大姐:盐捷。偶翅。。碉渡。聚谁。(5000個字符)
B小弟接收了5000個字符,保存在自己這里
B小弟:接收完成滞诺,謝謝
A大姐:ok
然后兩個家伙的通訊鏈路斷開垦巴,文件傳輸完成了(就是如此簡單)
個人看法
在互聯(lián)網(wǎng)如此發(fā)達的今天,兩個軟件的交談也越發(fā)頻繁铭段,不過我們見的一切其實就是和我們每天人與人談話一樣,只不過大家都有自己的說話習慣秦爆,有自己的表達方式序愚。只要大家的交談方式一致就不會說像`雞同鴨講那樣子`。socket只是一條虛擬的電話線等限,交談還是靠自己的約定爸吮。
還是那一句,技術(shù)無味望门,產(chǎn)品振奮人心形娇。我只想用最直白的話語說出最無味的底層技術(shù)。如果喜歡我的文章筹误,點贊是對我對大的支持桐早。