摘要:但,在這個期間,還有一個動作需要執(zhí)行,火幣服務(wù)器會每隔秒,向客戶端發(fā)送一條數(shù)據(jù),客戶端接收到這種信息的時候,需要一條對應(yīng)的數(shù)據(jù),內(nèi)容是的數(shù)據(jù)體相應(yīng)的數(shù)據(jù)格式如下,如果服務(wù)器在發(fā)送兩條數(shù)據(jù)后沒有收到客戶端返回的數(shù)據(jù),火幣服務(wù)器就會關(guān)閉連接。
火幣 websocket 獲取 k 線數(shù)據(jù),和其它數(shù)據(jù) API
火幣官方文檔地址: https://huobiapi.github.io/do...
pako(解壓gzip): https://github.com/nodeca/pako
參考鏈接(地址可能已過時,但內(nèi)容沒有): https://www.cnblogs.com/zhumi...
坑死,接火幣 websocket 地址 wss://api.huobi.pro/ws 的時候接到懷疑人生,怎么都無法建立連接,一度以為自己沒有像其它 get/post 接口那樣傳入該傳的參數(shù),又以為是 wss 走的是 SSL 通道,所以才沒能建立連接,還以為是需要服務(wù)端轉(zhuǎn)接一下。
但,最后的最后,竟然發(fā)現(xiàn)是因為地址的問題,這個地址根本接入不了,至少我這邊是接入不進去。
后來換這個地址: wss://api.hadax.com/ws就順利的接入了
火幣 websocket 規(guī)則先建立連接
客戶端發(fā)送訂閱請求,這個官方文檔有說明
火幣服務(wù)器返回訂閱成功與否的回饋信息
如果成功就定時發(fā)送 gzip 壓縮后的數(shù)據(jù),解壓 gzip 你需要 pako https://github.com/nodeca/pako
我們自己客戶端這邊接收數(shù)據(jù),并解壓數(shù)據(jù),才能獲取到真正的 json 數(shù)據(jù)
自己做前端該做的相應(yīng)操作,壓入數(shù)據(jù),展示數(shù)據(jù)什么的。
但,在這個期間,還有一個動作需要執(zhí)行,火幣服務(wù)器會每隔 5 秒,向客戶端發(fā)送一條 ping 數(shù)據(jù),客戶端接收到這種信息的時候,需要 send 一條對應(yīng)的 pong 數(shù)據(jù),內(nèi)容是 ping 的數(shù)據(jù)體(相應(yīng)的數(shù)據(jù)格式如下),如果服務(wù)器在發(fā)送兩條 ping 數(shù)據(jù)后沒有收到 客戶端返回的 pong 數(shù)據(jù),火幣服務(wù)器就會關(guān)閉連接。
關(guān)于其它信息的獲取,查看官方文檔關(guān)于 websocket 的說明就可以了。
// 服務(wù)器發(fā)送的 ping 數(shù)據(jù) { ping: 1562741680416 } // 客戶端返回服務(wù)器的 pong 數(shù)據(jù) { pong: 1562741680416 }執(zhí)行代碼
// K 線相關(guān) let hburl = "wss://api.huobipro.com/ws"; // 實時幣種價格 let haurl = "wss://api.hadax.com/ws"; let requestK = { // 請求對應(yīng)信息的數(shù)據(jù) req: "market.bchusdt.kline.1min", id: "bchusdt", from: Math.round(new Date().getTime()/1000) - 60, to: Math.round(new Date().getTime()/1000) }; let subK = { // 訂閱數(shù)據(jù) 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") { // 響應(yīng)數(shù)據(jù) handleReponseData(data); } else { // 數(shù)據(jù)體 console.log(data) } } // 發(fā)送響應(yīng)信息 function sendHeartMessage(ping) { socketK.send(JSON.stringify({"pong": ping})); } function handleReponseData(data) { }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/105527.html
摘要:作為開發(fā)同學的小伙伴客戶端的瀏覽器,有點小調(diào)皮還做了一個同源策略的限制,當我們的數(shù)據(jù)請求遇到不同源的情況下跨域,我們就得嘗試其它的通信方法,不能一條道走到黑。 showImg(https://segmentfault.com/img/bVburZO?w=600&h=450); Web2.0以來,Ajax的出世,解決了傳統(tǒng)表單提交頁面跳轉(zhuǎn),閃爍白屏等問題。使得Web頁面可以實現(xiàn)局部更新,...
摘要:不存在或格式不正確會導致文檔以兼容模式呈現(xiàn)標準模式的排版和運作模式都是以該瀏覽器支持的最高標準運行。如果不能確定時,首選使用自然樣式標簽 HTML 語義化 HTML標簽的語義化是指:通過使用包含語義的標簽(如h1-h6)恰當?shù)乇硎疚臋n結(jié)構(gòu) css命名的語義化是指:為html標簽添加有意義的class 為什么需要語義化: 去掉樣式后頁面呈現(xiàn)清晰的結(jié)構(gòu) 盲人使用讀屏器更好地閱讀 搜...
摘要:大家明天一起去唱吧關(guān)于數(shù)據(jù)庫設(shè)計當前一版不會固定大家的數(shù)據(jù)庫設(shè)計,大家可以自己自由設(shè)計,同時搭上自己的項目,構(gòu)建一個附帶的自項目。 InChat 一個IM通訊框架 一個輕量級、高效率的支持多端(應(yīng)用與硬件Iot)的異步網(wǎng)絡(luò)應(yīng)用通訊框架。(核心底層Netty) Github:InChat 版本目標:完成基本的消息通訊(僅支持文本消息),離線消息存儲,歷史消息查詢,一對一聊天、自我聊天、群...
閱讀 3096·2023-04-25 20:43
閱讀 1729·2021-09-30 09:54
閱讀 1600·2021-09-24 09:47
閱讀 2890·2021-09-06 15:02
閱讀 3522·2021-02-22 17:09
閱讀 1245·2019-08-30 15:53
閱讀 1448·2019-08-29 17:04
閱讀 1970·2019-08-28 18:22