跳到主要内容

protocolbuffers 接入方案

当前 ws 推送采用 protobuf 的形式,具体接入流程如下:

1.PB 文件定义 PB 定义文件可以在此连接处获取:https://github.com/mexcdevelop/websocket-proto

2.生成反序列化代码 使用https://github.com/protocolbuffers/protobuf工具编译.proto 文件,生成反序列化代码

Java

//在proto文件夹下执行
protoc *.proto --java_out=java文件输出路径

python

//在proto文件夹下执行
protoc *.proto --python_out=python文件输出路径

其他

 支持多种语言,包括 C++,C#, Go, Ruby, PHP, JS等。详见[https://github.com/protocolbuffers/protobuf](https://github.com/protocolbuffers/protobuf)。

3.数据反序列化 使用上一步生成的代码,反序列化数据

Java 引入 protobuf-java:

  <dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>S{protobuf.version}/version><!-- 根据项目实际情况指定版本 -->
</dependency>


解析示例:

// 组装对象
PushDataV3ApiWrapper pushDataV3ApiWrapper = PushDataV3ApiWrapper.newBuilder()
.setChannel("[email protected]@10ms")
.setSymbol("BTCUSDTI)
.setSendTime(System.currentTimeMillis())
.build();

// 序列化为byte数组
byte[] serializedData = pushDataV3ApiWrapper.toByteArray();

// 反序列化为 PushDataV3ApiWrapper 对象
PushDataV3ApiWrapper resultV3 = PushDataV3ApiWrapper.parseFrom(serializedData);

python

 解析示例:


import PushDataV3ApiWrapper_pb2

#组装对象
PushDataV3ApiWrapper = PushDataV3ApiWrapper_pb2.PushDataV3ApiWrapper()
PushDataV3ApiWrapper.channel = '[email protected]@10ms'
PushDataV3ApiWrapper.symbol ='BTCUSDT'

#序列化为字符串
serializedData = PushDataV3ApiWrapper.SerializeToString()

# 反序列化为 PushDataV3ApiWrapper 对象
result = PushDataV3ApiWrapper_pb2.PushDataV3ApiWrapper()
result.ParseFromString(serializedData)
print(result)

订阅一个信息流

订阅频道响应

 {
"id":0,
"code":0,
"msg":"[email protected]@100ms@BTCUSDT"
}
  • 请求
{
"method": "SUBSCRIPTION",
"params": ["[email protected]@100ms@BTCUSDT"]
}

取消订阅一个信息流

取消订阅响应

 {
"id":0,
"code":0,
"msg":"[email protected]@100ms@BTCUSDT"
}
  • 请求
{
"method": "UNSUBSCRIPTION",
"params": ["[email protected]@100ms@BTCUSDT"]
}

PING/PONG 机制

PING/PONG 响应

 {
"id":0,
"code":0,
"msg":"PONG"
}
  • 请求
{ "method": "PING" }