[TOC]
Dengan pesatnya pertumbuhan volume perdagangan mata uang kripto, efisiensi dan stabilitas push data real-time menjadi krusial. Solusi push WebSocket berbasis Protocol Buffers (protobuf) yang baru diluncurkan oleh MEXC Exchange menawarkan efisiensi transmisi yang lebih tinggi dan latensi yang lebih rendah dibandingkan format JSON tradisional. Artikel ini merinci cara mengakses dan memproses data menggunakan antarmuka protobuf WebSocket baru MEXC pada platform perdagangan kuantitatif FMZ.
Protocol Buffers adalah metode serialisasi struktur data yang dikembangkan oleh Google, yang tidak bergantung pada bahasa pemrograman dan platform. Dibandingkan dengan format JSON, protobuf memiliki keunggulan sebagai berikut:
Antarmuka push protobuf WebSocket yang baru ditambahkan dari MEXC terutama menyediakan aliran data berikut:
https://www.mexc.com/zh-MY/api-docs/spot-v3/websocket-market-streams
Private PrivateAccountV3Api PrivateDealsV3Api PrivateOrdersV3Api
Public PublicAggreBookTickerV3Api PublicAggreDealsV3Api PublicBookTickerV3Api …
Implementasi antarmuka WebSocket MEXC protobuf pada platform FMZ memerlukan persiapan berikut:
Untuk membangunPublicAggreDealsV3ApiAmbil koneksi saluran sebagai contoh:
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)
}
}
}
Temukan file .proto yang diperlukan:
https://github.com/mexcdevelop // Anda dapat menemukan file .proto pertukaran di sini
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;
}
Karena platform FMZ berbasis JavaScript, kita perlu menggunakan pustaka protobuf.js untuk menangani data biner:
Alamat pemuatan pustaka JS:
https://cdnjs.cloudflare.com/ajax/libs/protobufjs/7.5.3/protobuf.js
Data yang didorong oleh antarmuka WebSocket adalah data biner dan perlu didekodekan:
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)
}
}

Seperti yang Anda lihat, data biner yang dikirim oleh antarmuka diterima, dan setelah didekode, data yang dapat dibaca dicetak:
{
"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"
}
}
Dengan mengimplementasikan antarmuka WebSocket protobuf MEXC pada platform FMZ, kami memperoleh keuntungan berikut:
Program ini sangat cocok untuk:
Artikel ini ditulis berdasarkan spesifikasi antarmuka WebSocket protobuf terbaru dari bursa MEXC. Contoh kode telah diuji dan diverifikasi pada platform FMZ.