Type/to search
8
Follow
1364
Followers
Strategie zur Beschleunigung des Datenstroms: Praxis der Protobuf-Technologie auf der FMZ-Plattform
Discussions
Created 2025-08-08 16:09:52  Updated 2025-08-11 11:59:09
 0
 747

Zusammenfassung

Mit dem rasanten Wachstum des Kryptowährungshandelsvolumens sind Effizienz und Stabilität von Echtzeit-Daten-Pushs entscheidend geworden. Die neu eingeführte WebSocket-Push-Lösung von MEXC Exchange basierend auf Protocol Buffers (protobuf) bietet eine höhere Übertragungseffizienz und geringere Latenz als herkömmliche JSON-Formate. Dieser Artikel beschreibt, wie Sie mit der neuen WebSocket-protobuf-Schnittstelle von MEXC auf der quantitativen Handelsplattform FMZ auf Daten zugreifen und diese verarbeiten.

1. Technischer Hintergrund

1.1 Einführung in Protokollpuffer

Protocol Buffers ist eine von Google entwickelte sprach- und plattformunabhängige Methode zur Serialisierung von Datenstrukturen. Im Vergleich zum JSON-Format bietet Protobuf folgende Vorteile:

  • Kleinere Datenmenge: Die Binärkodierung spart 30-50 % Platz im Vergleich zum Textformat
  • Schnellere Analysegeschwindigkeit: Binäres Parsen ist 3-10 mal schneller als JSON-Parsing
  • Starke Typprüfung: Typprüfung zur Kompilierzeit, um Laufzeitfehler zu reduzieren
  • Abwärtskompatibilität: Unterstützt das Hinzufügen und Löschen von Feldern, ohne den vorhandenen Code zu beeinträchtigen

1.2 Übersicht über die MEXC WebSocket-Schnittstelle

Die neu hinzugefügte WebSocket-Protobuf-Push-Schnittstelle von MEXC bietet hauptsächlich die folgenden Datenströme:

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

  • Private
    PrivateAccountV3Api
    PrivateDealsV3Api
    PrivateOrdersV3Api

  • Public
    PublicAggreBookTickerV3Api
    PublicAggreDealsV3Api
    PublicBookTickerV3Api
    ...

2. FMZ-Plattformintegrationslösung

2.1 Umweltvorbereitung

Die Implementierung der MEXC protobuf WebSocket-Schnittstelle auf der FMZ-Plattform erfordert die folgenden Vorbereitungen:

  1. Holen Sie sich den MEXC-API-Schlüssel:Beantragen Sie den API-Schlüssel und den Geheimschlüssel auf der offiziellen MEXC-Website (nur für die private Schnittstelle erforderlich)
  2. Bereiten Sie die Protobuf-Definitionsdatei vor: Holen Sie sich die von MEXC bereitgestellte .proto-Datei

2.2 Verbindungsaufbau

Um zu etablierenPublicAggreDealsV3ApiNehmen wir als Beispiel die Kanalverbindung:

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

2.3 Protobuf-Datenanalyse

Suchen Sie die erforderliche .proto-Datei:

https://github.com/mexcdevelop // Die .proto-Dateien der Börse finden Sie hier

javascript
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; }

Da die FMZ-Plattform auf JavaScript basiert, müssen wir zur Verarbeitung binärer Daten die Bibliothek protobuf.js verwenden:

Ladeadresse der JS-Bibliothek:

https://cdnjs.cloudflare.com/ajax/libs/protobufjs/7.5.3/protobuf.js

2.4 Datenerfassung und -verarbeitung

Die von der WebSocket-Schnittstelle übertragenen Daten sind Binärdaten und müssen dekodiert werden:

javascript
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. Konkretes Implementierungsbeispiel

3.1 Abonnieren Sie die PublicAggreDealsV3Api-Kanaldaten

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

3.2 Live-Trading-Test

img

Wie Sie sehen, werden die von der Schnittstelle gesendeten Binärdaten empfangen und nach der Dekodierung werden die lesbaren Daten ausgedruckt:

json
{ "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" } }

4. Fazit und Ausblick

4.1 Implementierungseffekt

Durch die Implementierung der Protobuf-WebSocket-Schnittstelle von MEXC auf der FMZ-Plattform erzielen wir folgende Vorteile:

  1. Verbesserte Datenübertragungseffizienz: Reduziert die Bandbreitennutzung im Vergleich zum JSON-Format erheblich
  2. Reduzierte Latenz: Schnelleres binäres Parsen, wodurch die Verarbeitungszeit verkürzt wird
  3. Optimierung der Ressourcennutzung: Geringere CPU- und Speicherauslastung

4.2 Anwendungsszenarien

Dieses Programm eignet sich besonders für:

  • Hochfrequenzhandelsstrategien
  • Echtzeit-Arbitrage-System
  • Marktdatenanalyse
  • Risikoüberwachungssystem

4.3 Zukünftige Optimierungsrichtungen

  1. Unterstützung für mehr Datentypen: Erweitern Sie die Unterstützung für weitere MEXC-Datenströme

Verweise

  1. Offizielle API-Dokumentation von MEXC
  2. Offizielle Dokumentation zu Protocol Buffers
  3. FMZ Leitfaden zur quantitativen Plattformentwicklung

Dieser Artikel basiert auf der neuesten WebSocket-Protobuf-Schnittstellenspezifikation der MEXC-Börse. Die Codebeispiele wurden auf der FMZ-Plattform getestet und verifiziert.

Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)