摘要:但,在這個期間,還有一個動作需要執行,火幣服務器會每隔秒,向客戶端發送一條數據,客戶端接收到這種信息的時候,需要一條對應的數據,內容是的數據體相應的數據格式如下,如果服務器在發送兩條數據后沒有收到客戶端返回的數據,火幣服務器就會關閉連接。
火幣 websocket 獲取 k 線數據,和其它數據 API
火幣官方文檔地址: https://huobiapi.github.io/do...
pako(解壓gzip): https://github.com/nodeca/pako
參考鏈接(地址可能已過時,但內容沒有): https://www.cnblogs.com/zhumi...
坑死,接火幣 websocket 地址 wss://api.huobi.pro/ws 的時候接到懷疑人生,怎么都無法建立連接,一度以為自己沒有像其它 get/post 接口那樣傳入該傳的參數,又以為是 wss 走的是 SSL 通道,所以才沒能建立連接,還以為是需要服務端轉接一下。
但,最后的最后,竟然發現是因為地址的問題,這個地址根本接入不了,至少我這邊是接入不進去。
后來換這個地址: wss://api.hadax.com/ws就順利的接入了
火幣 websocket 規則先建立連接
客戶端發送訂閱請求,這個官方文檔有說明
火幣服務器返回訂閱成功與否的回饋信息
如果成功就定時發送 gzip 壓縮后的數據,解壓 gzip 你需要 pako https://github.com/nodeca/pako
我們自己客戶端這邊接收數據,并解壓數據,才能獲取到真正的 json 數據
自己做前端該做的相應操作,壓入數據,展示數據什么的。
但,在這個期間,還有一個動作需要執行,火幣服務器會每隔 5 秒,向客戶端發送一條 ping 數據,客戶端接收到這種信息的時候,需要 send 一條對應的 pong 數據,內容是 ping 的數據體(相應的數據格式如下),如果服務器在發送兩條 ping 數據后沒有收到 客戶端返回的 pong 數據,火幣服務器就會關閉連接。
關于其它信息的獲取,查看官方文檔關于 websocket 的說明就可以了。
// 服務器發送的 ping 數據 { ping: 1562741680416 } // 客戶端返回服務器的 pong 數據 { pong: 1562741680416 }執行代碼
// K 線相關 let hburl = "wss://api.huobipro.com/ws"; // 實時幣種價格 let haurl = "wss://api.hadax.com/ws"; let requestK = { // 請求對應信息的數據 req: "market.bchusdt.kline.1min", id: "bchusdt", from: Math.round(new Date().getTime()/1000) - 60, to: Math.round(new Date().getTime()/1000) }; let subK = { // 訂閱數據 sub: "market.bchusdt.kline.1min", id: "bchusdt" }; let socketK = new WebSocket(haurl); socketK.onopen = function () { console.log("connection establish"); socketK.send(JSON.stringify(subK)); socketK.send(JSON.stringify(requestK)); }; socketK.onmessage = function (event) { let blob = event.data; let reader = new FileReader(); reader.onload = function (e) { let ploydata = new Uint8Array(e.target.result); let msg = pako.inflate(ploydata, {to: "string"}); handleData(msg); }; reader.readAsArrayBuffer(blob, "utf-8"); }; socketK.onclose = function () { console.log("connection closed"); }; // 處理接收到的信息 function handleData(msg) { let data = JSON.parse(msg); if (data.ping) { // 如果是 ping 消息 sendHeartMessage(data.ping); } else if (data.status === "ok") { // 響應數據 handleReponseData(data); } else { // 數據體 console.log(data) } } // 發送響應信息 function sendHeartMessage(ping) { socketK.send(JSON.stringify({"pong": ping})); } function handleReponseData(data) { }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105527.html
摘要:作為開發同學的小伙伴客戶端的瀏覽器,有點小調皮還做了一個同源策略的限制,當我們的數據請求遇到不同源的情況下跨域,我們就得嘗試其它的通信方法,不能一條道走到黑。 showImg(https://segmentfault.com/img/bVburZO?w=600&h=450); Web2.0以來,Ajax的出世,解決了傳統表單提交頁面跳轉,閃爍白屏等問題。使得Web頁面可以實現局部更新,...
摘要:大家明天一起去唱吧關于數據庫設計當前一版不會固定大家的數據庫設計,大家可以自己自由設計,同時搭上自己的項目,構建一個附帶的自項目。 InChat 一個IM通訊框架 一個輕量級、高效率的支持多端(應用與硬件Iot)的異步網絡應用通訊框架。(核心底層Netty) Github:InChat 版本目標:完成基本的消息通訊(僅支持文本消息),離線消息存儲,歷史消息查詢,一對一聊天、自我聊天、群...
閱讀 3076·2023-04-25 20:43
閱讀 1719·2021-09-30 09:54
閱讀 1590·2021-09-24 09:47
閱讀 2874·2021-09-06 15:02
閱讀 3510·2021-02-22 17:09
閱讀 1233·2019-08-30 15:53
閱讀 1441·2019-08-29 17:04
閱讀 1956·2019-08-28 18:22