WebSocket ist selbst in normalen, schnellen und korrekten Implementierungen eine ziemlich launische Sache. Es ist kontraindiziert, es in MQL zu machen
imho: entweder sollte es von Terminalentwicklern kommen oder von externen DLLs bereitgestellt werden
Haben Sie es auf externen öffentlichen Servern getestet, insbesondere mit TLS? Es wäre toll, ein oder mehrere Beispiele zu sehen.
PS. Ich frage deshalb, weil dein Test mit wss://echo.websocket.org nicht funktioniert (ich hänge das Log an, BTW - warum schreibst du so viel unnütze Infos?). Reines ws (Port 80) funktioniert gut. In der Vergangenheit habe ich auch versucht, meine Implementierung von WebSockets in MQL5 laufen zu lassen, scheiterte aber daran, dass die MQL-Sockets einige Schwierigkeiten mit der TLS-Schicht haben. Sie scheinen immer noch nicht gelöst zu sein. Und wss ist heutzutage ein Muss, da alle Produktionsserver TLS verwenden und ungesicherte Verbindungen ablehnen.
WebSocket ist selbst in normalen, schnellen und korrekten Implementierungen eine ziemlich launische Sache. Es sollte nicht in MQL gemacht werden
imho: entweder sollte es von den Terminalentwicklern kommen oder von externen DLLs bereitgestellt werden.
Das ist Blödsinn.
Es ist überhaupt kein Unsinn über MQL. Es gab und gibt Probleme mit TLS (ich habe im Forum darüber geschrieben, aber ich habe nicht auf eine Lösung gewartet). Das Beispiel aus dem Artikel funktioniert nicht. Ich habe das Protokoll an den englischen Originalartikel angehängt.
- 2020.11.25
- www.mql5.com
Das ist Blödsinn.
Es gibt ein altes wss Problem dort: in der Standardfunktion SocketIsReadable ()
Es ist elementar zu umgehen, aber ohne diese Funktion.
uint len = 1024; //SocketIsReadable(socket);
Da gibt es ein altes wss-Problem: in der Standardfunktion SocketIsReadable ()
ist Workaround elementar, aber schon ohne diese Funktion.
Gibt es eine Begründung dafür? Was ist die magische Zahl und warum sollte sie für eine Nachricht mit einer Länge von z.B. 256 oder 1500 in Ordnung sein?
Dort gibt es ein altes wss-Problem: in der Standardfunktion SocketIsReadable ()
ist der Workaround elementar, aber schon ohne diese Funktion
Sie verstehen einfach nicht und wissen nicht, wie man diese Funktion benutzt.
Diese Funktion gibt sofort die verfügbare Anzahl von Bytes im Eingabepuffer an und sagt Ihnen nicht, ob der Socket aktiv ist. Die Funktion ist sehr wichtig und ermöglicht es Ihnen, nicht in eine synchrone Warteschleife zu gehen, sondern die Daten portionsweise auszulesen, ohne die Kontrolle über das Programm zu verlieren.
Und auch die TLS-Funktionen sind richtig - sie sind für geschulte Benutzer gedacht, die wissen, wie und in welcher Reihenfolge sie zu verwenden sind. Sie sind nicht für diejenigen gedacht, die "angerufen haben und das war's".
Nicht nur das, die Socket- und TLS-Funktionen sind in Reinform die gleichen, die das Terminal für raw/tls/https-Verbindungen verwendet. Das heißt, alles funktioniert einwandfrei. Die gleichen Implementierungen funktionieren auch in unseren Hochlastlösungen.
Rohe Netzwerkfunktionen sind nichts für Anfänger und nicht für naiven Gebrauch. Man sollte die Prinzipien und Eigenheiten der Netzwerkinteraktion gut genug verstehen. Und wenn wir über TLS sprechen, dann über die Methoden und die Reihenfolge der Verarbeitung des Handshake-Prozesses.- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Websockets für MetaTrader 5 :
Vor der Einführung der Netzwerkfunktionen, die mit der aktualisierten MQL5-API zur Verfügung gestellt wurde, waren MetaTrader-Programme in ihrer Fähigkeit beschränkt, sich mit Websocket-basierten Diensten zu verbinden und eine Schnittstelle zu bilden. Aber natürlich hat sich das alles geändert. In diesem Artikel werden wir die Implementierung einer Websocket-Bibliothek in reinem MQL5 untersuchen. Eine kurze Beschreibung des Websocket-Protokolls wird zusammen mit einer Schritt-für-Schritt-Anleitung für die Verwendung der resultierenden Bibliothek gegeben.
Hier sehen Sie ein Video, in dem das Programm läuft, während es mit dem Server verbunden ist.
Schlussfolgerung
Autor: Francis Dube