资讯专栏INFORMATION COLUMN

火币 websocket 获取 k 线数据,和其它数据 API

KunMinX / 3443人阅读

摘要:但,在这个期间,还有一个动作需要执行,火币服务器会每隔秒,向客户端发送一条数据,客户端接收到这种信息的时候,需要一条对应的数据,内容是的数据体相应的数据格式如下,如果服务器在发送两条数据后没有收到客户端返回的数据,火币服务器就会关闭连接。

火币 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) {
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105527.html

相关文章

  • 杂谈:前端Web通信

    摘要:作为开发同学的小伙伴客户端的浏览器,有点小调皮还做了一个同源策略的限制,当我们的数据请求遇到不同源的情况下跨域,我们就得尝试其它的通信方法,不能一条道走到黑。 showImg(https://segmentfault.com/img/bVburZO?w=600&h=450); Web2.0以来,Ajax的出世,解决了传统表单提交页面跳转,闪烁白屏等问题。使得Web页面可以实现局部更新,...

    Betta 评论0 收藏0
  • html基础

    摘要:不存在或格式不正确会导致文档以兼容模式呈现标准模式的排版和运作模式都是以该浏览器支持的最高标准运行。如果不能确定时,首选使用自然样式标签 HTML 语义化 HTML标签的语义化是指:通过使用包含语义的标签(如h1-h6)恰当地表示文档结构 css命名的语义化是指:为html标签添加有意义的class 为什么需要语义化: 去掉样式后页面呈现清晰的结构 盲人使用读屏器更好地阅读 搜...

    sihai 评论0 收藏0
  • InChat一版,仅仅两个接口实现自己的IM系统(可兼容)

    摘要:大家明天一起去唱吧关于数据库设计当前一版不会固定大家的数据库设计,大家可以自己自由设计,同时搭上自己的项目,构建一个附带的自项目。 InChat 一个IM通讯框架 一个轻量级、高效率的支持多端(应用与硬件Iot)的异步网络应用通讯框架。(核心底层Netty) Github:InChat 版本目标:完成基本的消息通讯(仅支持文本消息),离线消息存储,历史消息查询,一对一聊天、自我聊天、群...

    CrazyCodes 评论0 收藏0

发表评论

0条评论

KunMinX

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<