zoukankan      html  css  js  c++  java
  • 火币网API文档——Websocket 请求与订阅示例

    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
    }

                                           

  • 相关阅读:
    Python异常详解:基类、具体异常、异常层次结构
    Python视频教程,百度云资源,免费分享
    Python学习路线图(内附14张思维导图)
    Python视频教程免费下载,最新Python免费教程视频分享!
    怎样通过互联网ssh访问家里电脑
    linux下,把屏幕竖起来
    python中函数的不定长参数
    python中全局变量和局部变量
    vbox+Vagrant 入门指南
    python中函数返回多个值
  • 原文地址:https://www.cnblogs.com/zhuminghui/p/8977366.html
Copyright © 2011-2022 走看看