1. 访问地址

  • Pro 站行情请求地址为:wss://api.huobipro.com/ws
  • HADAX 站行情请求地址为:wss://api.hadax.com/ws

2. 数据压缩

  WebSocket API 返回的所有数据都进行了 GZIP 压缩,需要 client 在收到数据之后解压,推荐使用pako。(【pako】 是一个支持压缩和解压 GZIP 的库)

3. WebSocket库

  【ws】 是 Node.js 下的 WebSocket 库。

4. 心跳

  WebSocket API 支持双向心跳,无论是 Server 还是 Client 都可以发起ping message,对方返回 pong message。

WebSocket Server 发送心跳:

{"ping": 18212558000}

WebSocket Client 应该返回:

 {"pong": 18212558000}

注:返回的数据里面的'pong' 的值为收到的'ping' 的值

注:WebSocket Client 和 WebSocket Server 建立连接之后,WebSocket Server 每隔5s(这个频率可能会变化) 会向 WebSocket Client 发起一次心跳,WebSocket Client 忽略心跳2次后,WebSocket Server 将会主动断开连接。

例如

WebSocket Client 发送心跳:

{"ping": 18212553000}

注:发送的 message 里面,"ping" 的值必须为 Long 类型,否则返回错误信息:

{
"ts": 1492420473027,
"status": "error",
"err-code": "bad-request",
"err-msg": "invalid ping"
}

WebSocket Server 会返回:

{"pong": 18212553000}

注:返回的数据里面的 'pong' 的值为收到的'ping' 的值

5. topic格式

订阅数据和请求数据都要使用topic,topic的语法如下:

topic 类型 topic 语法 描述
KLine market.$symbol.kline.$period $period 可选值:{ 1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year }
Market Depth market.$symbol.depth.$type $type 可选值:{ step0, step1, step2, step3, step4, step5 } (合并深度0-5);step0时,不合并深度
Trade Detail market.$symbol.trade.detail  
Market Detail market.$symbol.detail  
  • $symble是币种,可选值: { ethbtc, ltcbtc, etcbtc, bchbtc...... }
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。

6. 请求数据(req/rep)

请求数据,仅返回一次数据

请求数据的格式

{
"req": "topic to req",
"id": "id generate by client"
}
  • 'req'的值为 topic 格式

正确请求数据的例子

{
"req": "market.btcusdt.kline.1min",
"id": "id10"
}
返回数据的例子:

{
"status": "ok",
"rep": "market.btcusdt.kline.1min",
"tick": [
{
"amount": 1.6206,
"count": 3,
"id": 1494465840,
"open": 9887.00,
"close": 9885.00,
"low": 9885.00,
"high": 9887.00,
"vol": 16021.632026
},
{
"amount": 2.2124,
"count": 6,
"id": 1494465900,
"open": 9885.00,
"close": 9880.00,
"low": 9880.00,
"high": 9885.00,
"vol": 21859.023500
}
]
}

错误请求数据的例子

{
"req": "market.invalidsymbo.kline.1min",
"id": "id10"
}

返回的错误信息的例子:

{
"status": "error",
"id": "id10",
"err-code": "bad-request",
"err-msg": "invalid topic market.invalidsymbol.trade.detail",
"ts": 1494483996521
}

7. 订阅数据(sub/pub)

订阅数据的格式

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

{
"sub": "topic to sub",
"id": "id generate by client"
}

正确订阅的例子

正确订阅:

{
"sub": "market.btcusdt.kline.1min",
"id": "id1"
}
  • "sub"值为 topic 格式

订阅成功返回数据的例子:

{
"id": "id1",
"status": "ok",
"subbed": "market.btcusdt.kline.1min",
"ts": 1489474081631
}

之后每当 KLine 有更新时,client 会收到数据,例子:

{
"ch": "market.btcusdt.kline.1min",
"ts": 1489474082831,
"tick": {
"id": 1489464480,
"amount": 0.0,
"count": 0,
"open": 7962.62,
"close": 7962.62,
"low": 7962.62,
"high": 7962.62,
"vol": 0.0
}
}

tick 说明:

  "tick": {
"id": K线id,
"amount": 成交量,
"count": 成交笔数,
"open": 开盘价,
"close": 收盘价,当K线为最晚的一根时,是最新成交价
"low": 最低价,
"high": 最高价,
"vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
}

错误订阅的例子

错误订阅(错误的 symbol):

{
"sub": "market.invalidsymbol.kline.1min",
"id": "id2"
}

订阅失败返回数据的例子:

{
"id": "id2",
"status": "error",
"err-code": "bad-request",
"err-msg": "invalid topic market.invalidsymbol.kline.1min",
"ts": 1494301904959
}

错误订阅(错误的 topic):

{
"sub": "market.btcusdt.kline.3min",
"id": "id3"
}

订阅失败返回数据的例子:

{
"id": "id3",
"status": "error",
"err-code": "bad-request",
"err-msg": "invalid topic market.btcusdt.kline.3min",
"ts": 1494310283622
}

8. 取消订阅(unsub)

取消订阅的格式

  WebSocket Client 订阅数据之后,可以取消订阅,取消订阅之后 WebSocket Server 将不会再发送该 topic 的数据,取消订阅的格式如下:

{
"unsub": "topic to unsub",
"id": "id generate by client"
}

正确取消订阅的例子:

{
"unsub": "market.btcusdt.trade.detail",
"id": "id4"
}

取消订阅成功返回信息的例子:

{
"id": "id4",
"status": "ok",
"unsubbed": "market.btcusdt.trade.detail",
"ts" 1494326028889
}

错误取消订阅的例子

错误取消订阅的例子(取消订阅一个尚未订阅的 topic):

{
"unsub": "market.btcusdt.trade.detail",
"id": "id5"
}

返回的错误信息的例子

{
"id": "id5",
"status": "error",
"err-code": "bad-request",
"err-msg": "unsub with not subbed topic market.btcusdt.trade.detail",
"ts": 1494326217428
}

错误取消订阅的例子(取消订阅一个不存在的 topic):

{
"unsub": "not-exists-topic",
"id": "id5"
}

返回的错误信息的例子:

{
"id": "id5",
"status": "error",
"err-code": "bad-request",
"err-msg": "unsub with not subbed topic not-exists-topic",
"ts": 1494326318809
}

火币网API文档——Websocket 请求与订阅示例的更多相关文章

  1. 火币网API文档——WebSocket API简介

    WebSocket API简介 WebSocket协议是基于TCP的一种新的网络协议.它实现了客户端与服务器之间在单个 tcp 连接上的全双工通信,由服务器主动发送信息给客户端,减少了频繁的身份验证等 ...

  2. 火币网API文档——WebSocket API Reference

    订阅 KLine 数据 market.$symbol.kline.$period 成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据: { " ...

  3. 火币网API文档——WebSocket API错误码

    错误信息返回格式 { "id": "id generate by client", "status": "error", ...

  4. 火币网API文档——REST 行情、交易API简介

    REST API 简介 火币为用户提供了一套全新的API,可以帮用户快速接入火币PRO站及HADAX站的交易系统,实现程序化交易. 访问地址 适用站点 适用功能 适用交易对 https://api.h ...

  5. 火币网API文档——REST API 错误码

    错误码 行情 API 错误码 错误码 描述 bad-request 错误请求 invalid-parameter 参数错 invalid-command 指令错 code 的具体解释, 参考对应的er ...

  6. 火币网API文档——REST API 签名认证

    安全认证 目前关于apikey申请和修改,请在“账户 - API管理”页面进行相关操作.其中AccessKey为API 访问密钥,SecretKey为用户对请求进行签名的密钥(仅申请时可见).Pro站 ...

  7. servlet-api api文档获取请求参数

    1.假如有个get请求后面带有的参数如下: a=b&a2=b2&a3=b3&a4=b4. 如果想获取所有的key,value.这个时候可以根据request的getQueryS ...

  8. 随时发布:REST API文档的代码仓库中的持续集成与协作

    本文主要内容:API文档提供了预测客户成功的关键路径:在代码附近的文档上进行协作可以更好地检查代码和文档文件,提高自动化效率,并专门针对文档进行质量测试:提供通用文档框架,标准,自动化和工具,以提高团 ...

  9. 【WebAPI No.4】Swagger实现API文档功能

    介绍: Swagger也称为Open API,Swagger从API文档中手动完成工作,并提供一系列用于生成,可视化和维护API文档的解决方案.简单的说就是一款让你更好的书写API文档的框架. 我们为 ...

随机推荐

  1. duilib进阶教程 -- TreeView控件的bug (9)

    一.不自动调整子控件的宽度(TreeView宽度小于260时) 相信亲们用同样的代码,显示效果肯定和Alberl不一样吧~O(∩_∩)O~ 嘿嘿,仔细对比下,看看你们的列表头背景图片是下面这样的么? ...

  2. 由n个元素组成的数组,n-2个数出现了偶数次,两个数出现了奇数次,且这两个数不相等,如何用O(1)的空间复杂度,找出这两个数

    思路分析: 方法一:涉及到两个数,就要用到异或定理了:若a^b=x,则a=b^x,b=x^a.对于这道题,假设这两个数分别为a.b,将数组中所有元素异或之后结果为x,因为a!=b,所以x=a^b,且x ...

  3. 网络编程 -- RPC实现原理 -- NIO单线程

    网络编程 -- RPC实现原理 -- 目录 啦啦啦 Class : Service package lime.pri.limeNio.optimize.socket; import java.io.B ...

  4. centos7.0 yum 安装php服务器

    https://blog.csdn.net/jiaoshenmo/article/details/50923900 首先收一下:centos7.0用yum直接安装apache.php他们的默认版本是a ...

  5. (转)mysql百万级以上查询优化

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. Gym 101149L Right Build

    L. Right Build time limit per test 2.0 s memory limit per test 256 MB input standard input output st ...

  7. Orleans学习总结(二)--创建工程

    通过第一篇Orleans学习总结(一)--入门认识我们大致知道知道是干嘛的了,下面我们来动手造一个传说中的神秘的高并发集群Orleans程序. 一.创建四个C#工程 1.IGrain工程,用来定义各种 ...

  8. Arduino数字引脚作为GPIO的使用

    引脚与GPIO的关系 引脚(pin)是对芯片的外部物理接口的一个称呼,它是在不把这个物理接口投入到具体应用场合下的称呼.例如,我们可以说,某某芯片的P1.5引脚可以作为数字输出驱动外部数字设备,也可以 ...

  9. Java 正则表达式 过滤html标签

    extends:http://aguang520.iteye.com/blog/1056686# 前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字符),使用了隐藏字段,可能有人就要问了, ...

  10. 企业级iptables防火墙实战

    iptables生产中在内网一般是关闭的,外围需要开启 大并发情况下,不能开启iptables,会影响性能,使用硬件外网防火墙 学好iptables的基础 1,OSI7层模型以及不同层对应哪些协议 2 ...