Diskussion zum Artikel "Entwicklung eines MQTT-Clients für MetaTrader 5: ein TDD-Ansatz"

 

Neuer Artikel Entwicklung eines MQTT-Clients für MetaTrader 5: ein TDD-Ansatz :

Dieser Artikel berichtet über die ersten Versuche bei der Entwicklung eines nativen MQTT-Clients für MQL5. MQTT ist ein Client-Server-Publish/Subscribe-Messaging-Transportprotokoll. Es ist leichtgewichtig, offen, einfach und so konzipiert, dass sie leicht zu implementieren ist. Diese Eigenschaften machen es ideal für den Einsatz in vielen Situationen.

Trotz der Tatsache, dass es aufgrund der Beschränkungen des Tech-Stacks und der teuren Netzwerkkosten robust, schnell und kostengünstig sein sollte, musste es eine hochwertige Datenbereitstellung mit kontinuierlicher Sitzungserkennung bieten, die es ihm ermöglicht, mit unzuverlässigen oder sogar unterbrochenen Internetverbindungen zurechtzukommen.

Als binäres Protokoll ist MQTT sehr effizient in Bezug auf den Speicher- und Verarbeitungsbedarf. Es ist sogar kurios, dass das kleinste MQTT-Paket nur zwei Bytes umfasst!


Da MQTT auf einem Publish/Subscribe-Modell (Pub/Sub) und nicht auf einem Request/Response-Modell basiert, ist es bidirektional. Das heißt, sobald eine Client/Server-Verbindung hergestellt ist, können die Daten jederzeit vom Client zum Server und vom Server zum Client fließen, ohne dass eine vorherige Anfrage erforderlich ist, wie es bei HTTP WebRequest der Fall ist. Sobald die Daten eintreffen, leitet der Server sie sofort an die Empfänger weiter. Diese Funktion ist ein Eckpfeiler des Echtzeit-Datenaustauschs, da sie eine minimale Latenzzeit zwischen den Endpunkten ermöglicht. Einige Anbieter werben mit Latenzzeiten in der Größenordnung von Millisekunden.

Autor: Jocimar Lopes

 
Guter Artikel.

Vor ein paar Monaten habe ich die PubSubClient-Bibliothek auf MQL5 migriert.
https://github.com/gmag11/MQTT-MQL5-Library
 

Hallo Jocimar,

Vielen Dank für diese erstaunliche Tutorial. Ich habe ein Problem mit der Ausführung von Teil 2 und wenn möglich, würde ich gerne Ihre Hilfe. Ich bin auf Windows 10 und ohne WSL laufen.
Ich habe mosquitto installiert und starten Sie den Dienst durch die Eingabe (aus dem Installationsordner):

net start mosquitto

und der Dienst startet erfolgreich mit dem Standardport 1883. Als nächstes, um den broker_ip zu finden, führe ich aus:

ipconfig/all

und erhalte die entsprechende IP-Adresse, die später verwendet wird, um den Netzwerkverkehr von 80 oder 443 (ich habe beides ausprobiert) auf die mit dem obigen Befehl gefundene broker_ip umzuleiten. Die Umleitung erfolgt durch Eingabe des folgenden Befehls:

netsh interface portproxy add v4tov4 listenport=443 listenaddress="what should be put here?" connectport=1883 connectaddress=" my broker_ip"

Dann fülle ich das Skript mit dem Port und der broker_ip aus und führe es aus. Ich erhalte den Fehlercode 5272, was bedeutet, dass die Verbindung zu einem entfernten Host fehlgeschlagen ist". Natürlich habe ich den broker_ip auf der Registerkarte " Expertenoptionen " angegeben.

Gibt es etwas, das ich in dem ganzen Prozess übersehe?

Vielen Dank im Voraus,
Dr.Pip

 
DrPip83 Fehlercode 5272, was bedeutet, dass die Verbindung zu einem entfernten Host fehlgeschlagen ist". Natürlich habe ich den broker_ip auf der Registerkarte " Expertenoptionen " angegeben.

Gibt es etwas, das ich in dem ganzen Prozess übersehe?

Vielen Dank im Voraus,
Dr.Pip

Hallo, DrPip83

ich habe festgestellt, dass Sie diese Frage vor vierzig Tagen gestellt haben. Ich habe sie vorher nicht gesehen. Gerade jetzt habe ich eine Nachricht von einem Administrator zu Ihrer Frage erhalten. Es tut mir leid für diese lange Verzögerung.

Zur Sache: Welches Skript verwenden Sie für die Verbindung? Könnten Sie es uns bitte mitteilen? In Teil 2 haben wir **keine funktionierende Verbindung** mit dem Broker. Bis zu diesem Zeitpunkt hatten wir nur Paketbausteine, die ersten Klassen, die wir als Prototypen entwickelt haben. Wir haben mit Verbindungen "out-of-band" experimentiert, sagen wir, indem wir nur interne Scratch-Skripte verwendet haben, die nicht für die Anhänge freigegeben waren. Erst jetzt implementieren wir echte Verbindungen im so genannten Operational Behavior des Protokolls (oder den Actions, wie es im Standard heißt).

Könnten Sie also bitte Ihr Skript teilen? Vielleicht kann ich Ihnen dabei helfen oder Ihnen die Skripte zur Verfügung stellen, die wir zu diesem Zweck verwendet haben.

 
Haben Sie schon etwas auf GitHub veröffentlicht? Ich würde gerne einen Blick darauf werfen und etwas beitragen, wenn ich kann!