餓了麼/美團類系統:用戶下單 → **網關/負載均衡** → **訂單服務** 寫入 DB + 發送訊息到 **消息隊列 (Kafka/RocketMQ)** → **商家端** 透過 **WebSocket 長連接** 即時收到推送 → 商家接單 → 狀態回寫 → 用戶端同樣透過 WebSocket 收到狀態更新。
| 技術 | 原理 | 適用場景 | 優/缺點 |
|---|---|---|---|
| WebSocket | 全雙工 TCP 連接,握手後雙向推送 | 即時訊息、協同編輯、股票行情、外賣接單 | ✓ 低延遲、雙向 ✗ 需心跳保活、代理/防火牆可能攔截 |
| Server-Sent Events (SSE) | HTTP 單向流,Server → Client | 通知公告、股價單向推送 | ✓ 自動重連、走 HTTP/2 ✗ 單向、IE 不支援 |
| 長輪詢 | Client 請求 → Server hold 直到有數據或超時 → 回應 → 立即再請求 | 簡單通知、不支援 WS 環境 | ✓ 相容性好 ✗ 延遲高、佔連接資源 |
| 短輪詢 | 固定間隔請求 | 非即時、數據量小 | ✓ 簡單 ✗ 資源浪費、延遲不可控 |
| HTTP/2 + gRPC Streaming | 多路複用雙向流 | 微服務內部、高性能內網 | ✓ 高效、強類型 ✗ 瀏覽器直連需 gRPC-Web |
用戶端 Gateway 訂單服務 MQ 商家端(WebSocket)
│ │ │ │ │
├─下單請求──────►│ │ │ │
│ ├─驗證/限流─────►│ │ │
│ │ ├─寫訂單DB─────►│ │
│ │ ├─發送訂單消息─►│ │
│ │ │ ├─推送消息─────►│ (長連接即時達到)
│ │ │ │ ├─接單操作
│ │ │ │ ├─發送狀態變更
│ │ │◄─更新訂單狀態──┤ │
│ │◄─回應用戶端────┤ │ │
│◄─下單成功──────┤ │ │ │
│ │ │ │ │
│ │ │ │ (同樣 WebSocket 推送給用戶端狀態更新)
核心思想:**「無狀態服務 + 有狀態連接層 + 異步解耦」**,才能支撐百萬級並發即時交互。