[TOC]
暗号通貨取引量の急速な増加に伴い、リアルタイムデータプッシュの効率性と安定性が極めて重要になっています。MEXC Exchangeが新たにリリースしたプロトコルバッファ(protobuf)ベースのWebSocketプッシュソリューションは、従来のJSON形式よりも高い転送効率と低レイテンシを実現します。この記事では、FMZクオンツ取引プラットフォーム上でMEXCの新しいWebSocket protobufインターフェースを使用してデータにアクセスし、処理する方法について詳しく説明します。
Protocol Buffersは、Googleが開発した、言語やプラットフォームに依存しないデータ構造のシリアル化手法です。JSON形式と比較して、Protobufには以下の利点があります。
MEXC に新しく追加された WebSocket protobuf プッシュ インターフェイスは、主に次のデータ ストリームを提供します。
https://www.mexc.com/zh-MY/api-docs/spot-v3/websocket-market-streams
Private PrivateAccountV3Api PrivateDealsV3Api PrivateOrdersV3Api
Public PublicAggreBookTickerV3Api PublicAggreDealsV3Api PublicBookTickerV3Api …
FMZ プラットフォームで MEXC protobuf WebSocket インターフェイスを実装するには、次の準備が必要です。
確立するPublicAggreDealsV3Apiチャネル接続を例に挙げます。
function main() {
var payload = {
"method": "SUBSCRIPTION",
"params": [
"[email protected]@100ms@BTCUSDT"
]
}
var conn = Dial("wss://wbs-api.mexc.com/ws|payload=" + JSON.stringify(payload))
while (true) {
var ret = conn.read()
if (ret) {
Log(ret)
}
}
}
必要な .proto ファイルを見つけます。
https://github.com/mexcdevelop // 取引所の.protoファイルはここにあります
syntax = "proto3";
option java_package = "com.mxc.push.common.protobuf";
option optimize_for = SPEED;
option java_multiple_files = true;
option java_outer_classname = "PushDataV3ApiWrapperProto";
message PublicAggreDealsV3Api {
repeated PublicAggreDealsV3ApiItem deals = 1;
string eventType = 2;
}
message PublicAggreDealsV3ApiItem {
string price = 1;
string quantity = 2;
int32 tradeType = 3;
int64 time = 4;
}
message PushDataV3ApiWrapper {
string channel = 1;
oneof body {
PublicAggreDealsV3Api publicAggreDeals = 314;
}
optional string symbol = 3;
optional string symbolId = 4;
optional int64 createTime = 5;
optional int64 sendTime = 6;
}
FMZ プラットフォームは JavaScript に基づいているため、バイナリ データを処理するには protobuf.js ライブラリを使用する必要があります。
JSライブラリの読み込みアドレス:
https://cdnjs.cloudflare.com/ajax/libs/protobufjs/7.5.3/protobuf.js
WebSocket インターフェースによってプッシュされるデータはバイナリ データであり、デコードする必要があります。
while (true) {
var ret = conn.read()
if (ret) {
const uint8arrayData = new Uint8Array(ret)
const message = PushDataV3ApiWrapper.decode(uint8arrayData)
data = PushDataV3ApiWrapper.toObject(message, {
longs: String,
enums: String,
bytes: String,
defaults: true,
arrays: true,
objects: true
})
Log("data:", data)
}
LogStatus(_D(), data)
}
let strPushDataV3ApiWrapper = `syntax = "proto3";
option java_package = "com.mxc.push.common.protobuf";
option optimize_for = SPEED;
option java_multiple_files = true;
option java_outer_classname = "PushDataV3ApiWrapperProto";
message PublicAggreDealsV3Api {
repeated PublicAggreDealsV3ApiItem deals = 1;
string eventType = 2;
}
message PublicAggreDealsV3ApiItem {
string price = 1;
string quantity = 2;
int32 tradeType = 3;
int64 time = 4;
}
message PushDataV3ApiWrapper {
string channel = 1;
oneof body {
PublicAggreDealsV3Api publicAggreDeals = 314;
}
optional string symbol = 3;
optional string symbolId = 4;
optional int64 createTime = 5;
optional int64 sendTime = 6;
}`
let code = HttpQuery("https://cdnjs.cloudflare.com/ajax/libs/protobufjs/7.5.3/protobuf.js")
let exports = {}
let module = { exports }
new Function("module", "exports", code)(module, exports)
let protobuf = module.exports
function main() {
const PushDataV3ApiWrapper = protobuf.parse(strPushDataV3ApiWrapper).root.lookupType("PushDataV3ApiWrapper")
var payload = {
"method": "SUBSCRIPTION",
"params": [
"[email protected]@100ms@BTCUSDT"
]
}
// proxy=socks5://x.x.x.x:xxxx
var conn = Dial("wss://wbs-api.mexc.com/ws|payload=" + JSON.stringify(payload))
var data = null
while (true) {
var ret = conn.read()
if (ret) {
const uint8arrayData = new Uint8Array(ret)
const message = PushDataV3ApiWrapper.decode(uint8arrayData)
data = PushDataV3ApiWrapper.toObject(message, {
longs: String,
enums: String,
bytes: String,
defaults: true,
arrays: true,
objects: true
})
Log("data:", data)
}
LogStatus(_D(), data)
}
}

ご覧のとおり、インターフェースによってプッシュされたバイナリ データが受信され、デコード後に読み取り可能なデータが出力されます。
{
"channel":"[email protected]@100ms@BTCUSDT",
"symbol":"BTCUSDT",
"sendTime":"1754487330985",
"publicAggreDeals":{
"deals":[
{"price":"113897.97","quantity":"0.00003103","tradeType":2,"time":"1754487330933"},
{"price":"113897.97","quantity":"0.00095331","tradeType":2,"time":"1754487330934"},
{"price":"113897.97","quantity":"0.00154766","tradeType":2,"time":"1754487330935"}
],
"eventType":"[email protected]@100ms"
}
}
MEXC の protobuf WebSocket インターフェイスを FMZ プラットフォームに実装すると、次の利点が得られます。
このプログラムは特に次の方に適しています:
この記事は、MEXCエクスチェンジの最新のWebSocket protobufインターフェース仕様に基づいて作成されています。コード例はFMZプラットフォームでテストおよび検証されています。