論WebSocket 與 Socket 的區別

想必大家再做即時通訊業務或需要替代輪訓的時候,肯定聽說過 WebSocket 和 Socket 這兩個東西,我們今天就來簡單說一下這兩者的區別。

WebSocket 是什麼

WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議。WebSocket 使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在 WebSocket API 中,瀏覽器和服務器只需要完成一次 HTTP 握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。

爲什麼有了 HTTP 還需要 WebSocket?

一般情況下我們使用 HTTP 有一個很大的缺陷,就是 HTTP 只能由客戶端來主動發起,如果有需要服務端主動通知的業務,就需要輪訓。輪詢的效率低,非常浪費資源。爲了解決 Web 端即時通訊的需求就出現了 WebSocket。

WebSocket(2)--爲什麼引入WebSocket協議

兼容性

WebSocket 最早是在 HTML5 標準中的一部分,基本現代瀏覽器都是支持的,都可以直接使用。雖然是 HTML5 的一部分,但是在瀏覽器之外也有相應的實現。比如 Socket.io 這個庫支持 Java、C++、Swift、Datr ,Python 的 ws4py,C++ 的WebSocket++ 等等。
服務端主流的 Web 容器如 Apache、Nginx、Tomcat 也都支持 WebSocket,還有 WebSocket 服務端框架如 websocketd 等。

Socket 是什麼

Unix 中的 Socket

操作系統中也有使用到 Socket 這個概念用來進行進程間通信,它和通常說的基於 TCP/IP 的 Socket 概念十分相似,代表了在操作系統中傳輸數據的兩方,只是它不再基於網絡協議,而是操作系統本身的文件系統。

網絡中的 Socket

網絡中的 Socket 並不是什麼協議,而是爲了使用 TCP,UDP 而抽象出來的一層 API,它是位於應用層和傳輸層之間的一個抽象層。Socket 是對 TCP/IP 的封裝;HTTP 是轎車,提供了封裝或者顯示數據的具體形式;Socket 是發動機,提供了網絡通信的能力。在 Unix 一切皆文件哲學的思想下,Socket 是一種"打開—讀/寫—關閉"模式的實現,服務器和客戶端各自維護一個"文件",在建立連接打開後,可以向自己文件寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉文件。所以如果你想基於 TCP/IP 來構建服務,那麼 Socket API 可能就是你會接觸到的API。

WebSocket 與 Socket 的區別

正如如上所說:

  1. Socket 是傳輸控制層的接口。用戶可以通過 Socket 來操作底層 TCP/IP 協議族通信。
  2. WebSocket 是一個完整應用層協議。
  3. Socket 更靈活,WebSocket 更易用。
  4. 兩者都能做即時通訊

轉載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章