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" }