[TOC]
암호화폐 거래량이 급증함에 따라 실시간 데이터 푸시의 효율성과 안정성이 매우 중요해졌습니다. MEXC 거래소에서 새롭게 출시한 프로토콜 버퍼(protobuf) 기반 웹소켓 푸시 솔루션은 기존 JSON 형식보다 높은 전송 효율성과 낮은 지연 시간을 제공합니다. 본 문서에서는 FMZ 양적 거래 플랫폼에서 MEXC의 새로운 웹소켓 protobuf 인터페이스를 사용하여 데이터에 액세스하고 처리하는 방법을 자세히 설명합니다.
Protocol Buffers는 Google에서 개발한 언어 및 플랫폼 독립적인 데이터 구조 직렬화 방법입니다. JSON 형식과 비교했을 때, protobuf는 다음과 같은 장점을 가지고 있습니다.
MEXC의 새로 추가된 WebSocket 프로토콜 버퍼 푸시 인터페이스는 주로 다음과 같은 데이터 스트림을 제공합니다.
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"
}
}
FMZ 플랫폼에 MEXC의 protobuf WebSocket 인터페이스를 구현하면 다음과 같은 이점을 얻을 수 있습니다.
이 프로그램은 특히 다음과 같은 사람에게 적합합니다:
이 문서는 MEXC 거래소의 최신 WebSocket 프로토콜 버퍼 인터페이스 사양을 기반으로 작성되었습니다. 코드 예제는 FMZ 플랫폼에서 테스트 및 검증되었습니다.