4
ফোকাস
1271
অনুসারী

ডেটা স্ট্রিম স্পিডআপ কৌশল: FMZ প্ল্যাটফর্মে প্রোটোবাফ প্রযুক্তি অনুশীলন

তৈরি: 2025-08-08 16:09:52, আপডেট করা হয়েছে: 2025-08-11 11:59:09
comments   0
hits   368

[TOC]

সারাংশ

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

১. প্রযুক্তিগত পটভূমি

১.১ প্রোটোকল বাফারের ভূমিকা

প্রোটোকল বাফার হল গুগল দ্বারা তৈরি ডেটা স্ট্রাকচার সিরিয়ালাইজ করার জন্য একটি ভাষা-স্বাধীন এবং প্ল্যাটফর্ম-স্বাধীন পদ্ধতি। JSON ফর্ম্যাটের তুলনায়, প্রোটোবাফের নিম্নলিখিত সুবিধা রয়েছে:

  • ছোট ডেটা সাইজ: টেক্সট ফরম্যাটের তুলনায় বাইনারি এনকোডিং ৩০-৫০% জায়গা সাশ্রয় করে।
  • দ্রুততর পার্সিং গতি: বাইনারি পার্সিং JSON পার্সিংয়ের চেয়ে 3-10 গুণ দ্রুত।
  • শক্তিশালী টাইপ চেকিং: রানটাইম ত্রুটি কমাতে কম্পাইল-টাইম টাইপ চেকিং
  • পশ্চাদমুখী সামঞ্জস্য: বিদ্যমান কোডকে প্রভাবিত না করেই ক্ষেত্র যোগ এবং মুছে ফেলা সমর্থন করে।

১.২ MEXC ওয়েবসকেট ইন্টারফেস ওভারভিউ

MEXC-এর নতুন যোগ করা WebSocket প্রোটোবাফ পুশ ইন্টারফেস মূলত নিম্নলিখিত ডেটা স্ট্রিম প্রদান করে:

https://www.mexc.com/zh-MY/api-docs/spot-v3/websocket-market-streams

  • Private PrivateAccountV3Api PrivateDealsV3Api PrivateOrdersV3Api

  • Public PublicAggreBookTickerV3Api PublicAggreDealsV3Api PublicBookTickerV3Api …

2. FMZ প্ল্যাটফর্ম ইন্টিগ্রেশন সমাধান

২.১ পরিবেশগত প্রস্তুতি

FMZ প্ল্যাটফর্মে MEXC প্রোটোবফ ওয়েবসকেট ইন্টারফেস বাস্তবায়নের জন্য নিম্নলিখিত প্রস্তুতির প্রয়োজন:

  1. MEXC API কী পান: MEXC অফিসিয়াল ওয়েবসাইট থেকে API কী এবং সিক্রেট কী-এর জন্য আবেদন করুন (শুধুমাত্র ব্যক্তিগত ইন্টারফেসের জন্য প্রয়োজন)
  2. প্রোটোবাফ ডেফিনিশন ফাইল প্রস্তুত করুন: MEXC দ্বারা প্রদত্ত .proto ফাইলটি পান।

২.২ সংযোগ স্থাপন প্রক্রিয়া

প্রতিষ্ঠা করা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)
}

3. নির্দিষ্ট বাস্তবায়ন উদাহরণ

৩.১ PublicAggreDealsV3Api চ্যানেলের ডেটা সাবস্ক্রাইব করুন

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)
    }
}   

৩.২ লাইভ ট্রেডিং পরীক্ষা

ডেটা স্ট্রিম স্পিডআপ কৌশল: FMZ প্ল্যাটফর্মে প্রোটোবাফ প্রযুক্তি অনুশীলন

আপনি দেখতে পাচ্ছেন, ইন্টারফেস দ্বারা পুশ করা বাইনারি ডেটা গ্রহণ করা হয় এবং ডিকোডিংয়ের পরে, পঠনযোগ্য ডেটা মুদ্রিত হয়:

{
    "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 এর প্রোটোবফ ওয়েবসকেট ইন্টারফেস বাস্তবায়নের মাধ্যমে, আমরা নিম্নলিখিত সুবিধাগুলি অর্জন করি:

  1. উন্নত ডেটা ট্রান্সমিশন দক্ষতা: JSON ফর্ম্যাটের তুলনায় ব্যান্ডউইথের ব্যবহার উল্লেখযোগ্যভাবে হ্রাস করে
  2. কম ল্যাটেন্সি: দ্রুত বাইনারি পার্সিং, প্রক্রিয়াকরণের সময় হ্রাস করে
  3. রিসোর্স ইউটিলাইজেশন অপ্টিমাইজেশন: কম CPU এবং মেমোরি ব্যবহার

৪.২ আবেদনের পরিস্থিতি

এই প্রোগ্রামটি বিশেষভাবে এর জন্য উপযুক্ত:

  • উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং কৌশল
  • রিয়েল-টাইম আরবিট্রেজ সিস্টেম
  • বাজার তথ্য বিশ্লেষণ
  • ঝুঁকি পর্যবেক্ষণ ব্যবস্থা

৪.৩ ভবিষ্যতের অপ্টিমাইজেশনের দিকনির্দেশনা

  1. আরও ডেটা টাইপের জন্য সমর্থন: আরও MEXC ডেটা স্ট্রিমের জন্য সমর্থন প্রসারিত করুন

তথ্যসূত্র

  1. MEXC অফিসিয়াল API ডকুমেন্টেশন
  2. প্রোটোকল বাফারের অফিসিয়াল ডকুমেন্টেশন
  3. FMZ পরিমাণগত প্ল্যাটফর্ম উন্নয়ন নির্দেশিকা

এই প্রবন্ধটি MEXC এক্সচেঞ্জের সর্বশেষ WebSocket protobuf ইন্টারফেস স্পেসিফিকেশনের উপর ভিত্তি করে লেখা হয়েছে। কোড উদাহরণগুলি FMZ প্ল্যাটফর্মে পরীক্ষা এবং যাচাই করা হয়েছে।