跳到主要内容

Websocket接口

概述

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

  • 客户端和服务器进行数据传输时,请求头信息比较小,大概2个字节。

  • 客户端和服务器皆可以主动地发送数据给对方。

  • 不需要多次创建TCP请求和销毁,节约宽带和服务器的资源。

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

域名WebSocket API建议使用
公共频道wss://ws.bitget.com/v2/ws/public主域名, 公共频道
私有频道wss://ws.bitget.com/v2/ws/private主域名, 私有频道

连接上ws后30s内订阅或订阅后30s内用户未发送ping指令,系统会自动断开连接

连接

连接说明

连接限制:100个/IP

订阅限制:240次/小时

如果出现网络问题,系统会自动断开连接

如果连接成功后30s未订阅或订阅后30s内服务器未向用户推送数据,系统会自动断开连接

为了保持连接有效且稳定,建议您进行以下操作:

  1. 每次接收到消息后,用户设置一个定时器,定时30秒。
  2. 如果定时器被触发(30秒内没有收到新消息),发送字符串 'ping'。
  3. 期待一个文字字符串'pong'作为回应。如果在 N秒内未收到,请发出错误或重新连接。
  4. Websocket服务器每秒最多接受10个消息。消息包括:
  • PING帧
  • JSON格式的消息,比如订阅,断开订阅。
  1. 如果用户发送的消息超过限制,连接会被断开连接。反复被断开连接的IP有可能被服务器屏蔽;
  2. 单个连接最多可以订阅 1000 个Streams;
  3. 单个IP最多可以创建100个连接。

登录

api_key:用于调用API的用户身份唯一标示,需要用户申请

passphrase:API Key 的密码,如果没有口令的话传入空字符串("")即可

timestamp: 时间戳 是Unix Epoch时间,单位是秒 (与HTTP接口不同), 时间戳30秒后会过期

sign:为签名字符串,签名规则参照如下:

Message即(待签名字符串)为: timestamp+method+requestPath

其中timestamp示例(取秒,不要取毫秒):

const timestamp = '' + Date.now() / 1000

method一律默认为'GET'

requestPath 一律默认为 /user/verify

请求在时间戳之后30秒会失效,如果您的服务器时间和API服务器时间有偏差,推荐使用 REST API查询 服务器时间,然后设置时间戳

签名方式说明参考API概述里的验证部分

生成最终签名的步骤

HMAC

第1步,将待签名字符串使用私钥secretkey进行hmac sha256加密

Signature = hmac_sha256(secretkey, Message)

第2步,对于Signature进行base64编码

Signature = base64.encode(Signature)
RSA

第一步,使用RSA私钥privateKey对待签名字符串进行SHA-256签名。

第二步,对生成的签名字符串进行编码为 base64 string,得到签名字符串进行接口请求。

如果登录失败会自动断开链接

请求格式说明
{
"op":"login",
"args":[
{
"apiKey":"<api_key>",
"passphrase":"<passphrase>",
"timestamp":"<timestamp>",
"sign":"<sign>"
}
]
}
请求示例
{
"op":"login",
"args":[
{
"apiKey":"xx_xxx",
"passphrase":"12345678",
"timestamp":"1538054050",
"sign":"8RCOqCJAhhEh4PWcZB/96QojLDqMAg4qNynIixFzS3E="
}
]
}
成功返回示例
{
"event":"login",
"code":"0",
"msg":""
}
失败返回示例
{
"event":"error",
"code":"30005",
"msg":"login fail"
}

订阅

订阅说明

请求格式说明
{
"op":"subscribe",
"args":[
"<SubscriptionTopic> "
]
}

WebSocket 频道: 公共频道

公共频道无需登录,包括行情频道,K线频道,交易数据频道,深度数据频道等。

instId 取值参考 symboldefault

用户可以选择订阅一个或者多个频道,一次订阅多个频道总长度不能超过4096个字节。

请求示例
{
"op":"subscribe",
"args":[
{
"instType":"USDT-FUTURES",
"channel":"ticker",
"instId":"BTCUSDT"
},
{
"instType":"USDT-FUTURES",
"channel":"candle1m",
"instId":"BTCUSDT"
}
]
}

请求参数

参数类型是否必须描述
opString操作,subscribe
argsArray请求订阅的频道列表
> instTypeString产品类型 MC:公共频道
> channelString频道名
> instIdString产品ID或产品名称
{
"event":"subscribe",
"arg":{
"instType":"USDT-FUTURES",
"channel":"ticker",
"instId":"BTCUSDT"
}
}

返回参数

参数类型是否必须描述
eventString事件,subscribe
argObject订阅的频道
> instTypeString产品类型
> channelString频道名
> instIdString产品ID
codeString错误码
msgString错误消息

取消订阅

可以取消一个或者多个频道

请求格式说明
{
"op":"unsubscribe",
"args":[
"< SubscriptionTopic > "
]
}
请求示例
{
"op":"unsubscribe",
"args":[
{
"instType":"USDT-FUTURES",
"channel":"ticker",
"instId":"BTCUSDT"
},
{
"instType":"USDT-FUTURES",
"channel":"candle1D",
"instId":"BTCUSDT"
}
]
}

请求参数

参数类型是否必须描述
opString操作,unsubscribe
argsArray取消订阅的频道列表
> instTypeString产品类型 MC:公共频道
> channelString频道名
> instIdString产品ID
返回示例
{
"event":"unsubscribe",
"arg":{
"instType":"USDT-FUTURES",
"channel":"ticker",
"instId":"BTCUSDT"
}
}

您的阅读体验如何?