iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
自我挑戰組

API 全攻略系列 第 23

Day 23:WebSocket 與即時 API

  • 分享至 

  • xImage
  •  

前言

在前面的章節中,我們設計的 API 大多基於 HTTP Request/Response 模式,這種方式雖然直觀,但在某些需要「即時性」的場景中,效率就顯得不足,例如:

  • 即時聊天系統
  • 股票報價、遊戲狀態推播
  • IoT 裝置監控
  • 線上協作(Google Docs 類型應用)
    這時候,就需要 WebSocket 這種雙向通訊協議。

1. WebSocket 與 HTTP 的差異

特性 HTTP API WebSocket
通訊模式 單向:Client 發送請求 → Server 回應 雙向:Client 與 Server 都能主動發送
連線 每次請求需要建立連線 連線建立後可持續存在
適用場景 RESTful API、CRUD 操作 即時性應用(聊天室、即時推播)

簡單來說:

  • HTTP 適合「查詢/修改資料」的場景
  • WebSocket 適合「持續交換訊息」的場景

2. 建立一個簡單的 WebSocket 伺服器

我們使用 Node.js + ws 套件 來示範。

安裝套件

npm install ws

server.js

import { WebSocketServer } from "ws";

const wss = new WebSocketServer({ port: 8080 });

wss.on("connection", (ws) => {
  console.log("Client connected");

  // 接收來自 client 的訊息
  ws.on("message", (message) => {
    console.log(`Received: ${message}`);
    ws.send(`伺服器回覆: ${message}`);
  });

  // 客戶端斷線
  ws.on("close", () => {
    console.log("Client disconnected");
  });
});

console.log("WebSocket Server is running on ws://localhost:8080");

3. 建立 WebSocket Client 測試

可以直接在瀏覽器 Console 測試:

const socket = new WebSocket("ws://localhost:8080");

// 連線成功
socket.onopen = () => {
  console.log("Connected to server");
  socket.send("Hello from client!");
};

// 接收訊息
socket.onmessage = (event) => {
  console.log("Message from server:", event.data);
};

4. WebSocket API 的應用場景

1.聊天室系統

使用 WebSocket 可以讓使用者即時收到其他人發送的訊息。

2.即時通知

例如電商平台的「訂單狀態更新」即時推播。

3.遊戲伺服器

遊戲角色位置、血量等資訊需要即時同步。

4.金融資訊

股票報價、匯率、加密貨幣價格的即時更新。


5. 與 REST API 的整合

實際專案中,WebSocket 與 REST API 常常搭配使用

  • REST API:用來做 初始資料讀取(例如載入聊天室歷史訊息)。
  • WebSocket:用來做 即時更新(例如推送新訊息)。
    這樣可以讓系統同時擁有 資料一致性即時性

小結

WebSocket 為 API 帶來了「即時性」,突破了傳統 HTTP 的單向限制。

  • REST API :適合 CRUD 與資料存取。
  • WebSocket :適合即時互動與事件推送。
    在現代應用中,兩者常常搭配使用,讓 API 同時具備穩定性與即時性。

上一篇
Day 22:gRPC 簡介
下一篇
Day 24:API Rate Limit 與流量控制
系列文
API 全攻略24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言