為什麼用 WebSocket
- 報價變化時才推送,比定時輪詢 REST 更及時,也不佔用每分鐘請求額度。
- 一個連接可以訂閱多個标的,同一個标的被多個連接訂閱互不影響。
- 相容 iTick 的協議,已有的訂閱程式碼只需要換連接地址。
消息格式
// Subscribe / unsubscribe. types: tick, quote, depth, kline@1
{"ac":"subscribe","params":"AAPL$US,700$HK","types":"quote,tick"}
{"ac":"unsubscribe","params":"AAPL$US","types":"quote"}
// Heartbeat
{"ac":"ping","params":"1731688569840"}
// Pushed message
{"code":1,"data":{"s":"BTCUSDT","r":"BA","ld":83988.54,"v":0.00019,"type":"tick"}}JavaScript 示例
const ws = new WebSocket("wss://api.itick.dev/crypto?token=YOUR_API_KEY");
ws.onopen = () => {
ws.send(JSON.stringify({ ac: "subscribe", params: "BTCUSDT$BA", types: "quote,tick" }));
// 每 30 秒至少发送一次心跳
setInterval(() => ws.send(JSON.stringify({ ac: "ping", params: String(Date.now()) })), 25000);
};
ws.onmessage = (event) => console.log(event.data);支持的市场
連接地址為 wss://api.itick.dev/{market},market 可選 stock、forex、crypto、indices、future、fund。可用數據以所選方案為准。
連接與訂閱限製
每個 API Key 在每個市场的並發連接數、每個連接可訂閱的标的數都由方案決定,見 定價。免費方案預設不含 WebSocket。
常見問題
斷線了怎麼辦?
服務端因權杖停用、重置或過期而斷開連接時,請在重新獲得有效權杖後重連並重新訂閱。網絡斷開同樣需要重連後重新訂閱。
需要發心跳嗎?
需要,建議至少每 30 秒發送一次 ping,超過一分鐘沒有心跳連接可能被斷開。
瀏覽器里怎麼傳權杖?
瀏覽器的 WebSocket 無法設置請求標頭,把權杖放在連接地址的查詢參數 token 中。