Diskussion zum Artikel "Websockets für MetaTrader 5" - Seite 4

 
Denis Kirichenko # :

Also warten die versprochenen 3 Jahre... es ist sehr wenig übrig - ein Jahr zu warten )))

Wahrscheinlich :)))

 
MetaQuotes:

Der neue Artikel Websockets für MetaTrader 5 wurde veröffentlicht:

Autor: Francis Dube

Großartig! Wie analysieren Sie also den Fortsetzungsrahmen? Bisher werden nur Frames analysiert, die in der ersten Antwort enthalten sind. Ich verwende Nodejs Websocket.
 

Hallo tolle Arbeit dort @Francis Dube,

Ich habe Ihre Bibliothek implementiert, um mit meinem Web-Socket-Server in nodejs/nestjs zu arbeiten. Das Problem, dem ich gegenüberstehe, ist, dass wenn ich die Sockets lokal mit meinem Server verwende, alles gut funktioniert. mql5 Socket sendet den Handshake und ich erhalte die korrekte Antwort, d.h. "101 Switching protocols".

Aber die Dinge ändern sich, sobald ich meine Nestjs-App auf der Digitalocean-App-Plattform einsetze. Zunächst war ich nicht in der Lage, mql5-Sockets mit meinem Server zu verbinden, aber dann war ich in der Lage, eine Verbindung herzustellen, aber ich erhalte keine korrekte Antwort für den Handshake, da die Connect-Methode von "CWebsocketClient" false zurückgibt, da die Upgrade-Methode keine Antwort parsen konnte, ich erhalte nur "H" als Antwort von meiner eingesetzten App.

Obwohl ich mir über den Rest der Funktionalität nicht sicher bin, da der Socket-Status durchgehend auf "CONNECTING" gesetzt ist, kann ich nach der erfolgreichen Verbindung nichts tun. Allerdings, wenn nach dem Aufruf der connect-Methode, wenn die Daten zu meinem Server mit "sendString" -Methode senden die Daten erhalten geliefert.

Und das ist, wo ich bin verwirrt, wie die Dinge in meiner app zu implementieren, wie ich nicht in der Lage, Sache Handshake Sache auf andere Weise zu testen, ich habe versucht, Erweiterungen zu überprüfen, ob meine Web-Socket in meiner app funktioniert stellt sich heraus, seine Arbeit gut, aber sobald es kommt zu mql5 Dinge sind durcheinander und nicht ganz elaborative genug, um die Ursache für dieses Verhalten zu erhalten.

Jegliche Hinweise oder Anleitung zu diesem Problem wird sehr geschätzt werden.

PS: Ich mache keine ausgefallenen Sachen für jetzt in meinem mql5 EA, ich bin nur nach der Verbindung Anleitung im Artikel und nur die Verbindung mit dem Server. Sonst nichts! :(

 

Beachten Sie, dass es einen Fehler in WebsocketClient.fillRxBuffer gibt, und zwar in dem Szenario, in dem es mehrere Aufrufe von m_socket.Read(..) innerhalb der while-Schleife gibt.

m_socket.Read(..) hängt die Daten nicht an das Ende des Arrays an, sondern schreibt an den Anfang des Arrays.

In meinem Fall, in dem ich zu Testzwecken eine Verbindung zu einem lokalen Websocket herstellte, stellte ich fest, dass der erste Aufruf von m_socket.Read(..) nur ein einziges Byte abholte, während eine zweite Schleife von m_socket.Read(..) den Rest abholte. Infolgedessen fehlte im Puffer das erste Byte, was zu einem Fehler beim Parsen des Frames führte.
Sie müssen auch sicherstellen, dass der m_rxbuf leer ist, bevor Sie den Puffer füllen, sonst könnte er denken, dass mehr Daten geholt wurden, als es tatsächlich der Fall war. Der Puffer wird nach dem Parsen von Frames geleert, aber nur um sicher zu gehen, habe ich beschlossen, ihn bei jedem Aufruf von fillRxBuffer zu leeren.

Ich habe auch dafür gesorgt, dass die Schleife von m_socket.Read(..) aufhört, sobald keine Daten mehr zu lesen sind, so dass nicht mehr auf die Timeout-Periode gewartet wird. Idealerweise denke ich, dass es tatsächlich weiter lesen sollte, bis genug Daten vorhanden sind, um einen Frame zu analysieren, aber das erfordert eine Umstrukturierung des Codes ein bisschen.

Trotzdem vielen Dank für diesen Artikel. Bisher ist es die Lösung, die dem am nächsten kommt, wonach ich gesucht habe. Schließlich kann ich meine eigene Web-Socket-Bibliothek erstellen.

 
https://www.mql5.com/en/book

finden Sie in diesem Buch einen funktionierenden nativen Websocket

genießen
 
Soewono Effendi #:
h ttps:// www.mql5.com/en/book

finden Sie in dem Buch working native websocket

genießen

Ich glaube, Sie verwechseln Websockets mit normalen Netzwerk-Sockets oder einfachen HTTP-WebRequests. Websockets erfordern benutzerdefinierte Kodierung zusätzlich zu normalen HTTP-Anfragen. Es ist mir gelungen, eine Lösung auf der Grundlage dieses Artikels mit einigen projektspezifischen Änderungen zu finden.

 
Shane Leigh Kingston #:

Ich glaube, Sie verwechseln Websockets mit normalen Netzwerk-Sockets oder einfachen HTTP-WebRequests. Websockets erfordern benutzerdefinierte Kodierung zusätzlich zu normalen HTTP-Anfragen. Es ist mir gelungen, eine Lösung auf der Grundlage dieses Artikels mit einigen projektspezifischen Änderungen zu finden.

Ich habe Ihnen einen Hinweis gegeben,
, wenn Sie nicht in das Buch schauen wollen, ist das Ihr Verlust, nicht meiner ;)

 
Shane Leigh Kingston Parsen des Frames führte.
Sie müssen auch sicherstellen, dass der m_rxbuf leer ist, bevor Sie den Puffer füllen, sonst könnte er denken, dass mehr Daten geholt wurden, als es tatsächlich der Fall war. Der Puffer wird nach dem Parsen von Frames geleert, aber um sicherzugehen, habe ich beschlossen, ihn bei jedem Aufruf von fillRxBuffer zu leeren.

Ich habe auch dafür gesorgt, dass die Schleife von m_socket.Read(..) aufhört, sobald keine Daten mehr zu lesen sind, so dass nicht mehr auf die Timeout-Periode gewartet wird. Idealerweise sollte die Schleife so lange weiterlaufen, bis genügend Daten vorhanden sind, um einen Frame zu parsen, aber das erfordert eine kleine Umstrukturierung des Codes.

Trotzdem vielen Dank für diesen Artikel. Bisher ist es die Lösung, die dem am nächsten kommt, wonach ich gesucht habe. Schließlich kann ich meine eigene Web-Socket-Bibliothek erstellen.

Bitte @ Shane Leigh Kingston, ich wusste, dass dies ein alter Beitrag ist, aber ich brauche einen Weg, um Websocket mit mql5 zu implementieren, und diese Bibliothek scheint die einzige zu sein, die dem relativ nahe kommt. Aber wieder bin Gesicht das Problem, das Sie gerade beschrieben, aber ich bin kein Experte in diesem Bereich. Bitte können Sie mich anleiten, wie ich das zum Laufen bringen kann. Ich wäre Ihnen sehr dankbar, wenn Sie mir helfen könnten.

Vielen Dank im Voraus
 
pauldic #:
Bitte @ Shane Leigh Kingston, ich wusste, dies ist ein alter Beitrag, aber brauchen einen Weg, um Websocket mit mql5 zu implementieren und diese Bibliothek scheint die einzige relativ nah an es zu sein. Aber wieder bin Gesicht das Problem, das Sie gerade beschrieben, aber ich bin kein Experte in diesem Bereich. Bitte können Sie mich anleiten, wie ich das zum Laufen bringen kann. Ich wäre Ihnen sehr dankbar, wenn Sie mir helfen könnten.

Es gibt eine weitere Implementierung von Websockets in dem Algotrading-Buch.

Eine aktuelle Version der Quellcodes finden Sie in der Diskussion im Forum:

MQL5 Book: Advanced language tools / Projects / WebSocket protocol in MQL5
MQL5 Book: Advanced language tools / Projects / WebSocket protocol in MQL5
  • www.mql5.com
We have previously looked at Theoretical foundations of the WebSockets protocol . The complete specification is quite extensive, and a detailed...
 
Stanislav Korotky #:

Es gibt eine weitere Implementierung von Websockets in dem Algotrading-Buch.

Eine aktuelle Version der Quellcodes finden Sie in der Diskussion im Forum:


Ja, @Stanislav, ich habe es gestern gefunden und es war bisher sehr nützlich, danke