需求:App 端記錄比賽事件(進球、失誤),同步推送到 App、微信小程式/公眾號、網頁端,並節省流量。
架構建議
伺服器端
- 使用 WebSocket(或 Socket.io)維持長連線,事件發生即推送 JSON,避免輪詢浪費流量。
- 提供 HTTP 歷史訊息 API(分頁/增量),供新進用戶拉取歷史。
- 訊息格式精簡:
{"t":1699900000,"e":"goal","p":"PlayerA"},必要時啟用 gzip 壓縮。
客戶端
- App:原生 WebSocket 或 OkHttp WebSocket,斷線自動重連。
- 微信小程式:
wx.connectSocket,注意微信僅允許 `wss://` 且域名需備案。
- 網頁:原生 `WebSocket`,兼容性極佳。
省流量關鍵
- 採用**推送**而非輪詢。
- 訊息**二進制壓縮**(Protobuf/MessagePack)或極簡 JSON。
- 客戶端**本地緩存**已讀訊息,重連時請求增量(`since=lastMsgId`)。
先用簡單輪詢(每 30 秒)跑通流程,再升級 WebSocket,降低複雜度風險。