Just My Life & My Work

Socket 原理與流程

平常 App 串 API 就是使用 Restful 的方式,現在想要在 App 取得即時資訊,一個較為可靠的做法是 Socket。應用例如我常用的通訊 App,Line、Messenger、Wechat、Telegram等。

首先來看 Socket 流程圖~

透過上面圖片可以了解,服務器端先初始化 Socket,然後與端口綁定 (bind),對端口進行監聽 (listen),調用接受 (accept) 阻塞,等待客戶端連接。

在這時如果有個客戶端初始化一個 Socket,然後連接服務器 (connect),如果連接成功,這時客戶端與服務器端的連接就建立了。

客戶端發送數據 (send) 請求,服務器端接收 (recv) 請求並處理請求,然後把回應數據發送 (send) 給客戶端,客戶端讀取 (recv) 數據,最後連接關閉 (close),一次完整互動結束。

Socket 的優點:

  • 傳輸數據為字節級,傳輸數據可自定義,數據量小
  • 傳輸數據時間短,性能高
  • 適合於客戶端和服務器端之間訊息即時交互
  • 可以加密,數據安全性強
  • 保持連接狀態
  • 節省頻寬

Socket 的缺點:

  • 需對傳輸的數據進行解析,轉化成應用級的數據
  • 對開發人員的開發水平要求高
  • 相對於 Http 協議傳輸,增加了開發量

WebSocket

WebSocket protocol 是 HTML5 一種新的協議。它實現了瀏覽器與服務器全雙向通訊,能更好地節省服務器資源和頻寬,並達到即時通訊,它是建立在 TCP 之上,同 HTTP 一樣透過 TCP 來傳輸數據。WebSocket 同 HTTP 一樣也是應用層的協議,並且一開始的握手也需要藉助 HTTP 請求完成。

它和 HTTP 最大不同是:

  • WebSocket 是一種雙向通訊協議,在建立連接後,WebSocket 服務器和 Browser/Client Agent 都能主動的向對方發送或接收數據,就像 Socket 一樣;
  • WebSocket 需要類似 TCP 的客戶端和服務器端透過握手連接,連接成功後才能相互通訊。

上圖對比可以看出,相對於傳統 HTTP 每次請求,應答都需要客戶端與服務端建立連接的模式,WebSocket 是類似 Socket 的 TCP 長連接的通訊模式,一旦 WebSocket 連接建立後,後續數據都以幀序列的形式傳輸。

在客戶端斷開 WebSocket 連接或 Server 端斷掉連接前,不需要客戶端和服務端重新發起連接請求。在海量客戶端與服務器的交互流量大情況下,節省極大網路頻寬資源的消耗,在性能上有明顯的優勢,且客戶端發送和接受訊息是在同一個持久連接上發起,明顯有即時性優勢。

WebSocket 與 Socket 的區別

Socket 其實並不是一個協議,而是為了方便使用 TCP 或 UDP 而抽象出來的一層,是位於應用層和傳輸控制層之間的一組介面。

Socket 是應用層與 TCP/IP 協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket 其實就是一個門面模式,它把複雜的 TCP/IP 協議族隱藏在 Socket 介面後面,對使用者來說,一組簡單的介面就是全部,讓 Socket 去組織資料,以符合指定的協議。

當兩臺主機通訊時,必須通過 Socket 連線,Socket 則利用 TCP/IP 協議建立 TCP 連線。TCP 連線則更依靠於底層的 IP 協議,IP 協議的連線則依賴於鏈路層等更低層次。

WebSocket 則是一個典型的應用層協議。

區別:Socket是傳輸控制層協議,WebSocket是應用層協議。

WebSocket 與 HTTP 的關係

相同點

  • 都是一樣基於 TCP,都是可靠性傳輸協議。
  • 都是應用層協議。

不同點

  • WebSocket 是雙向通訊協議,模擬 Socket 協議,可以雙向傳送或接受資訊。HTTP 是單向的。
  • WebSocket 是需要握手進行建立連線。

聯絡

WebSocket 在建立握手時,資料是透過 HTTP 傳輸。但是建立之後,在真正傳輸時候是不需要 HTTP 協議。

參考:

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: