# Websocket推送

### 概述

WebSocket是HTML5一种新的协议（Protocol）。它实现了客户端与服务器全双工通信， 使得数据可以快速地双向传播。通过一次简单的握手就可以建立客户端和服务器连接， 服务器根据业务规则可以主动推送信息给客户端。其优点如下：

* 客户端和服务器进行数据传输时，请求头信息比较小，大概2个字节。
* 客户端和服务器皆可以主动地发送数据给对方。
* 不需要多次创建TCP请求和销毁，节约宽带和服务器的资源。

**强烈建议开发者使用WebSocket API获取市场行情和买卖深度等信息。**

### 基本信息

* 币币行情基础站点: <wss://wspool.hiotc.pro/kline-api/ws>
* 合约行情基础站点: [wss://futuresws.xxx.xxx/kline-api/ws](wss://futuresws.goko.vip/kline-api/ws)   其中xxx.xxx替换成交易所的主域
* 返回数据除了心跳数据都会二进制压缩(用户需要通过Gzip算法进行解压)

### Demo

<https://github.com/exchange2021/openapidemo/blob/master/src/main/java/com/ws/WsTest.java>

### 参数示例

| event   | channel                       | description      |
| ------- | ----------------------------- | ---------------- |
| `sub`   | `market_$symbol_depth_step0`  | `订阅深度`           |
| `unsub` | `market_$symbol_depth_step0`  | `取消订阅深度`         |
| `sub`   | `market_$symbol_trade_ticker` | `订阅实时成交`         |
| `unsub` | `market_$symbol_trade_ticker` | `取消订阅实时成交`       |
| `sub`   | `market_$symbol_ticker`       | `订阅24h行情数据`      |
| `unsub` | `market_$symbol_ticker`       | `取消订阅24h行情数据`    |
| `sub`   | `market_$symbol_kline_1min`   | `订阅1min实时k线信息`   |
| `req`   | `market_$symbol_kline_1month` | `请求1month历史k线记录` |

```java
{
    "pong": 15359750
```

### 订阅全量深度

* 订阅数据样例

```java
{
    "event":"sub",
    "params":{
        "channel":"market_$symbol_depth_step0", // $symbol E.g. 币币:btcusdt 合约:e_btcusdt
        "cb_id":"1" // 业务id 非必填
    }
}
```

* 返回买卖盘最多30条数据

```java
{
    "channel":"market_btcusdt_depth_step0",
    "ts":1506584998239,
    "tick":{
        "asks":[ //卖盘
            [10000.19,0.93],
            [10001.21,0.2],
            [10002.22,0.34]
        ],
        "buys":[ //买盘
            [9999.53,0.93],
            [9998.2,0.2],
            [9997.19,0.21]
        ]
    }
}
```

### 订阅实时成交

* 订阅数据样例

```java
{
    "event":"sub",
    "params":{
        "channel":"market_$symbol_trade_ticker", // $symbol E.g. 币币:btcusdt 合约:e_btcusdt
        "cb_id":"1" // 业务id 非必填
    }
}
```

* 返回

```java
{
    "channel":"market_$symbol_trade_ticker",
    "ts":1506584998239,//请求时间
    "tick":{
        "id":12121,//data中最大交易ID
        "ts":1506584998239,//data中最大时间
        "data":[
            {
                "side":"buy",//买卖方向buy,sell
                "price":32.233,//单价
                "vol":232,//数量
                "amount":323,//总额
                "ds":'2017-09-10 23:12:21'
            }
        ]
    }
}
```

### 订阅k线行情

* 订阅数据样例

```java
{
    "event":"sub",
    "params":{
        "channel":"market_$symbol_kline_[1min/5min/15min/30min/60min/1day/1week/1month]", // $symbol E.g. btcusdt 
        "cb_id":"1" // 业务id 非必填
    }
}
```

* 返回

```java
{
    "channel":"market_$symbol_kline_1min", //1min代表1分钟k线
    "ts":1506584998239,//请求时间
    "tick":{
        "id":1506602880,//时间刻度起始值
        "vol":1212.12211,//交易量
        "open":2233.22,//开盘价
        "close":1221.11,//收盘价
        "high":22322.22,//最高价
        "low":2321.22//最低价
    }
}
```

### 订阅24h行情ticker

* 订阅数据样例

```java
{
    "event":"sub",
    "params":{
        "channel":"market_$symbol_ticker", // $symbol E.g. 币币:btcusdt 合约:e_btcusdt
        "cb_id":"1" // 业务id 非必填
    }
}
```

* 返回

```java
{
    "channel":"market_$symbol_ticker",
    "ts":1506584998239,//请求时间
    "tick":{
        "amount":123.1221,//交易额
        "vol":1212.12211,//交易量
        "open":2233.22,//开盘价
        "close":1221.11,//收盘价
        "high":22322.22,//最高价
        "low":2321.22,//最低价
        "rose":-0.2922,//涨幅
    }
}
```

### 请求k线历史数据

* 请求数据样例

```java
{
    "event":"req",
    "params":{
        "channel":"market_$symbol_kline_[1min/5min/15min/30min/60min/1day/1week/1month]",
        "cb_id":"1",
        "endIdx":"1506602880", //返回endIdx前pageSize条数据  非必填
        "pageSize":100 // 非必填
    }
}
```

* 返回

```java
{
    "event_rep":"rep","channel":"market_$symbol_kline_5min","cb_id":"原路返回",
    "ts":1506584998239,//请求时间
    "data":[ //最多300条
        {
            "id":1506602880,//时间刻度起始值
            "amount":123.1221,//交易额
            "vol":1212.12211,//交易量
            "open":2233.22,//开盘价
            "close":1221.11,//收盘价
            "high":22322.22,//最高价
            "low":2321.22//最低价
        },
        {
            "id":1506602880,//时间刻度起始值
            "amount":123.1221,//交易额
            "vol":1212.12211,//交易量
            "open":2233.22,//开盘价
            "close":1221.11,//收盘价
            "high":22322.22,//最高价
            "low":2321.22//最低价
        }
    ]
}
```

### 请求成交记录

* 请求数据样例

```java
{
    "event":"req",
    "params":{
        "channel":"market_$symbol_trade_ticker", // $symbol E.g. 币币:btcusdt 合约:e_btcusdt
        "cb_id":"1" // 业务id 非必填
    }
}
```

* 返回

```java
{
    "event_rep":"rep","channel":"market_$symbol_trade_ticker",
    "cb_id":"原路返回",
    "ts":1506584998239,"status":"ok",
    "data":[
        {
            "side":"buy",//买卖方向buy,sell
            "price":32.233,//单价
            "vol":232,//数量
            "amount":323//总额
        },
        {
            "side":"buy",//买卖方向buy,sell
            "price":32.233,//单价
            "vol":232,//数量
            "amount":323//总额
        }
    ]
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://exdocs.gitbook.io/v/websocket.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
