在 Web 開發領域,開發人員會遇到許多技術和術語,其中兩個是Webhooks和WebSockets 。兩者都用於透過網路進行通信,但它們具有不同的目的並以不同的方式工作。本文旨在深入了解這兩種技術、它們的差異以及何時使用每種技術。
什麼是 Webhook?
Webhook 本質上是「事件觸發的 HTTP 請求」。它們是伺服器到伺服器的通訊方式。 Webhook 由伺服器中的事件觸發,並透過預先配置的 URL 將資料傳送到另一台伺服器。
Webhooks 如何運作?
當伺服器上發生特定事件時,伺服器會向為 Webhook 配置的 URL 發送 HTTP 請求(常見的是 POST)。該請求將包含有關接收伺服器可以使用的事件的資訊。
何時使用 Webhook?
Webhook 可以有效率地接收即時更新,並且可以根據特定事件和需求進行自訂。它們通常用於以下場景:新用戶註冊時更新客戶資料庫、註冊後通知郵件伺服器發送歡迎電子郵件,甚至在將變更推送到客戶時觸發持續整合管道中的新建置。
Webhooks:Pub-Sub 方法
想像一下您在一家餐廳等待點餐。服務生四處走動,宣布訂單已完成。這種「喊出」系統類似於 Webhook 的運作方式。 Webhook 是一種輕量級方法,可讓一個應用程式(發布者)通知另一個應用程式(訂閱者)有關特定事件的資訊。
詳細情況如下:
設定:訂閱者向發布者提供一個 URL,即他們的「收聽位址」。
事件觸發器:當發布者的應用程式中發生預定義事件(例如,新使用者註冊)時,它會觸發 Webhook 通知。
傳遞:發布者向訂閱者的 URL 發送 HTTP 請求(通常是 POST),在請求正文中攜帶事件的相關資訊。
處理:訂閱者接收通知並相應地處理訊息,可能會觸發其自己的應用程式內的操作。
將 Webhooks 視為推播通知系統 - 當發生值得注意的事情時,發布者將更新推送給訂閱者。這種單向通訊使 Webhooks 變得簡單且可擴展,非常適合訂閱者只需對事件做出反應且不需要持續來回通訊的情況。
什麼是 WebSocket?
WebSocket 透過在從客戶端(瀏覽器)到伺服器的兩個 TCP 連接埠之間建立的單一連線建立雙向、持久、雙向通訊通道。
WebSocket 是如何運作的?
與預設 HTTP 不同,WebSocket 連線在事務之間保持開啟狀態,允許資料在雙方之間無縫流動。 WebSocket 連線的任一端都可以向另一端發送資料,這使其成為即時資料傳輸的理想選擇。
何時使用 WebSocket?
WebSocket 在處理低延遲伺服器-客戶端資料流應用程式時非常有用。它們提供了巨大的速度優勢,尤其是當資料從伺服器發送到客戶端時。它們通常用於即時應用程式,例如即時聊天、即時分析、多人遊戲和協作編輯環境(例如 Google Docs)。
WebSockets:開放通道
另一方面,WebSocket 在用戶端(如 Web 瀏覽器)和伺服器之間建立持久的雙向通訊通道。只要雙方需要,這種連線就會保持開放狀態,從而實現雙向即時資料交換——更像是用於連續對話的專用電話線。
以下簡要介紹了 WebSocket 的工作原理:
握手:客戶端透過向伺服器發送特殊的握手請求來發起連線。
升級:伺服器確認請求並將連線從 HTTP 升級為 WebSocket 連線。這將建立一個持久的雙向通道。
資料流:一旦連接,客戶端和伺服器都可以隨時發送和接收資料訊息。訊息通常以 JSON 等格式傳送,以便於解析。
關閉:當不再需要通訊時,任何一方都可以發起關閉握手,以優雅地終止連線。
WebSocket 提供即時通訊流,使其非常適合需要連續資料交換的應用程式。例如,聊天應用程式利用 WebSockets 確保訊息在發送後幾乎立即出現在收件人的螢幕上。
雖然 Webhooks 和 WebSocket 都用於透過 Web 進行通信,但它們具有不同的用途並以不同的方式運作。以下是一些主要區別:
通訊:Webhooks 是一種單向通訊方法(從伺服器到客戶端),而 WebSocket 是一種雙向通訊方法。
連線:Webhook 對每個訊息使用一個新的 HTTP 請求,而 WebSocket 對多個訊息使用單一持久性連線。
使用案例:Webhook 是事件通知的理想選擇,而 WebSocket 是即時應用程式的理想選擇。
使用案例:Webhook 與 WebSocket
現在您已經了解了 webhooks 和 WebSockets,了解何時使用它們至關重要:
* You need a simple, scalable solution for one-way notifications.
* The subscriber only needs to react to events and doesn't require constant updates.
* Brief bursts of data exchange are sufficient.
* You require real-time, two-way communication between client and server.
* Constant data exchange is necessary for the application to function (e.g., chat, collaborative editing).
* Low latency (minimal delay) is critical.
總之,雖然Webhook非常適合單向、事件驅動的通信,但WebSocket擅長提供即時、雙向通訊。兩者之間的選擇取決於您應用程式的特定需求。現代應用程式同時使用這兩種技術並發揮各自的優勢並不罕見。
追蹤我@ricardogesteves
https://github.com/RicardoGEsteves
原文出處:https://dev.to/ricardogesteves/webhooks-and-websockets-3p53