[TOC]
ক্রিপ্টোকারেন্সি ট্রেডিং ভলিউমের দ্রুত বৃদ্ধির সাথে সাথে, রিয়েল-টাইম ডেটা পুশের দক্ষতা এবং স্থিতিশীলতা অত্যন্ত গুরুত্বপূর্ণ হয়ে উঠেছে। প্রোটোকল বাফার (প্রোটোবাফ) এর উপর ভিত্তি করে MEXC এক্সচেঞ্জের নতুন চালু হওয়া ওয়েবসকেট পুশ সলিউশনটি ঐতিহ্যবাহী JSON ফর্ম্যাটের তুলনায় উচ্চতর ট্রান্সমিশন দক্ষতা এবং কম ল্যাটেন্সি প্রদান করে। এই নিবন্ধটি FMZ পরিমাণগত ট্রেডিং প্ল্যাটফর্মে MEXC এর নতুন ওয়েবসকেট প্রোটোবাফ ইন্টারফেস ব্যবহার করে ডেটা অ্যাক্সেস এবং প্রক্রিয়া করার পদ্ধতি সম্পর্কে বিস্তারিতভাবে বর্ণনা করে।
প্রোটোকল বাফার হল গুগল দ্বারা তৈরি ডেটা স্ট্রাকচার সিরিয়ালাইজ করার জন্য একটি ভাষা-স্বাধীন এবং প্ল্যাটফর্ম-স্বাধীন পদ্ধতি। 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 protobuf ইন্টারফেস স্পেসিফিকেশনের উপর ভিত্তি করে লেখা হয়েছে। কোড উদাহরণগুলি FMZ প্ল্যাটফর্মে পরীক্ষা এবং যাচাই করা হয়েছে।