分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

Websocket 请求与订阅示例

发布时间:2023-09-06 01:52责任编辑:苏小强关键词:Web

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 语法描述
KLinemarket.$symbol.kline.$period$period 可选值:{ 1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year }
Market Depthmarket.$symbol.depth.$type$type 可选值:{ step0, step1, step2, step3, step4, step5 } (合并深度0-5);step0时,不合并深度
Trade Detailmarket.$symbol.trade.detail 
Market Detailmarket.$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}

                                       

Websocket 请求与订阅示例

原文地址:https://www.cnblogs.com/zhuminghui/p/8977366.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved