[TOC]
क्रिप्टोकरेंसी ट्रेडिंग वॉल्यूम में तेज़ी से वृद्धि के साथ, रीयल-टाइम डेटा पुश की दक्षता और स्थिरता बेहद ज़रूरी हो गई है। MEXC एक्सचेंज का नया लॉन्च किया गया वेबसॉकेट पुश सॉल्यूशन, जो प्रोटोकॉल बफ़र्स (प्रोटोबफ़) पर आधारित है, पारंपरिक JSON फ़ॉर्मैट की तुलना में बेहतर ट्रांसमिशन दक्षता और कम विलंबता प्रदान करता है। यह लेख FMZ क्वांटिटेटिव ट्रेडिंग प्लेटफ़ॉर्म पर MEXC के नए वेबसॉकेट प्रोटोबफ़ इंटरफ़ेस का उपयोग करके डेटा तक पहुँचने और उसे प्रोसेस करने का तरीका बताता है।
प्रोटोकॉल बफ़र्स, Google द्वारा विकसित डेटा संरचनाओं को क्रमबद्ध करने के लिए एक भाषा-स्वतंत्र और प्लेटफ़ॉर्म-स्वतंत्र विधि है। JSON प्रारूप की तुलना में, प्रोटोबफ़ के निम्नलिखित लाभ हैं:
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 प्रोटोबफ वेबसॉकेट इंटरफ़ेस को कार्यान्वित करने के लिए निम्नलिखित तैयारियों की आवश्यकता होती है:
स्थापित करना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 प्लेटफॉर्म जावास्क्रिप्ट पर आधारित है, इसलिए हमें बाइनरी डेटा को संभालने के लिए protobuf.js लाइब्रेरी का उपयोग करने की आवश्यकता है:
JS लाइब्रेरी लोडिंग पता:
https://cdnjs.cloudflare.com/ajax/libs/protobufjs/7.5.3/protobuf.js
वेबसॉकेट इंटरफ़ेस द्वारा भेजा गया डेटा बाइनरी डेटा है और इसे डिकोड करने की आवश्यकता होती है:
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 के प्रोटोबफ वेबसॉकेट इंटरफेस को लागू करके, हमें निम्नलिखित लाभ प्राप्त होते हैं:
यह कार्यक्रम विशेष रूप से इसके लिए उपयुक्त है:
यह लेख MEXC एक्सचेंज के नवीनतम WebSocket प्रोटोबफ इंटरफ़ेस विनिर्देश के आधार पर लिखा गया है। कोड उदाहरणों का FMZ प्लेटफ़ॉर्म पर परीक्षण और सत्यापन किया गया है।