WebSocket 與 Socket 的區別

準備:若是不太瞭解網絡的朋友能夠先看一下我以前寫的文章 須要瞭解的網絡協議php

想必你們再作即時通信業務或須要替代輪訓的時候,確定據說過 WebSocket 和 Socket 這兩個東西,咱們今天就來簡單說一下這二者的區別。web

WebSocket 是什麼

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

爲何有了 HTTP 還須要 WebSocket?

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

WebSocket(2)--爲何引入WebSocket協議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。socket

WebSocket 與 Socket 的區別

正如如上所說:操作系統

  1. Socket 是傳輸控制層的接口。用戶能夠經過 Socket 來操做底層 TCP/IP 協議族通訊。
  2. WebSocket 是一個完整應用層協議。
  3. Socket 更靈活,WebSocket 更易用。
  4. 二者都能作即時通信
相關文章
相關標籤/搜索