天天看點

websocket 項目啟示錄為什麼會出現HTTP,WebSocket?

websocket出現是因為浏覽器不給開後門,不是WebSocket基于HTTP,相反可看成看成看成HTTP基于WebSocket。

為什麼會出現HTTP,WebSocket?

假設1984年,人們使用TCP協定通訊,假設那時候還沒網頁浏覽器,都是通過各種軟體直接通訊。假設到了1986,人們使用浏覽器浏覽網頁,假設當時電腦時100MHz,100M記憶體。

早年tcp連結數量有限制,不是記憶體,主要是select函數效率問題,select要輪詢所有連接配接才能确定有哪些已經就緒。

在引入epoll/kqueue/完成端口之後,效率問題解決了,大量并發TCP連接配接就不是問題了,看過2013年的論文,有人用java在一台pc上支援50萬個TCP長連接配接。

于是伺服器要求“所有用戶端,打開網頁之後,必須關閉TCP連接配接”。這就是HTTP的初衷。按照這個協定,伺服器接受TCP連接配接,幾秒鐘之内讀取資料,檢驗之後,回複資料,斷開連接配接,節省“資源”。

等到二十年後,QQ桌面版好好的,QQ網頁版用的越來越多。由于浏覽器都是連接配接之後很快斷開,QQ網頁版,隻能靠各種polling方式持續互動資料(HTTP keep-alive也有自己的缺點),浪費大量的帶寬(這時候帶寬的費用就大了),同時用戶端收到消息也不及時,還有各種其它問題。QQ網頁版想直接用TCP協定長時間連接配接,但是QQ網頁版能做的,都是浏覽器允許做的。

可以說,websocket的出現,就是因為浏覽器不支援TCP直連,不給開後門。于是“希望所有的浏覽器都能夠直接進行TCP連接配接”,于是浏覽器出現了websocket協定。是以,因為某些原因,人們在TCP上面弄了一個HTTP協定,把TCP支援的一些特性删除了,然後若幹年之後想要那些被删除的特性,傳回TCP,于是出現了WebSocket。WebSocket實際上可以看作HTTP的降級!

“不是WebSocket基于HTTP,而是可以看成可以看成可以看成HTTP基于WebSocket”。

WebSocket 不是 HTML5 的東西。

WebSocket 是一個協定,歸屬于 IETF。

WebSocket API 是一個 Web API,歸屬 W3C。

兩個規範是獨立釋出的。

廣義上的 HTML5 裡面包含的是 WebSocket API,并不是 WebSocket。簡單的說,可以把 WebSocket 當成 HTTP,WebSocket API 當成 Ajax。

隻是因為 WebSocket 對于非 Web 部分的意義不大(畢竟直接用 TCP 就好了),是以從現實角度的機率上而言 WebSocket 目前基本隻會通過 Web API 裡的 WebSocket API 來使用。但并不等于 WebSocket 屬于 WebSocket API。

HTTP是運作在TCP協定傳輸層上的應用協定,而WebSocket是通過HTTP協定協商如何連接配接,然後獨立運作在TCP協定傳輸層上的應用協定。你需要知道WebSocket僅僅是利用了HTTP協定做連接配接請求。WebSocket相當于一個簡化版的TCP傳輸子層(實際上WebSocket也是應用層協定)。WebSocket之是以能持久連接配接原因是它運作在TCP協定上,TCP協定自身是長連接配接協定,是以WebSocket當然可以長連接配接啦。

如果你要問為什麼HTTP不是長連接配接,原因是早期的HTTP在發起每個請求,響應完成後就會關閉Socket。但是後來加了多路複用KeepAlive協定後HTTP協定已經可以實作長連接配接了,可以處理長連接配接事務了。至于添加WebSocket特性,是為了更好、更靈活,輕量的與伺服器通訊。因為WebSocket提供了簡單的消息規範,可以更快的适應長連接配接的環境,其實作在HTTP協定自身就可以做,但是不太輕便。

為什麼HTML4不支援WebSocket?

WebSocket的協商機制HTML4底層API沒有實作。

websocket 項目啟示錄為什麼會出現HTTP,WebSocket?

用于一

websocket 項目啟示錄為什麼會出現HTTP,WebSocket?

使用者二

websocket 項目啟示錄為什麼會出現HTTP,WebSocket?

TOM 群發了消息

websocket 項目啟示錄為什麼會出現HTTP,WebSocket?

Mike 也受到了消息的重創

websocket 項目啟示錄為什麼會出現HTTP,WebSocket?

參考

https://www.zhihu.com/question/20215561/answer/117875755 https://www.zhihu.com/question/20215561/answer/58593827 https://www.zhihu.com/question/20215561/answer/153288456