Discusión sobre el artículo "WebSocket para MetaTrader 5"

 

Artículo publicado WebSocket para MetaTrader 5:

Antes de que aparecieran las funciones de red en la API MQL5 actualizada, las aplicaciones MetaTrader tenían una capacidad limitada para conectarse e interactuar con servicios basados ​​en el protocolo WebSocket. Ahora, la situación es distinta. En este artículo, analizaremos la implementación de la biblioteca WebSocket en el MQL5 puro. Asimismo, presentaremos una breve descripción del protocolo WebSocket y una guía paso a paso sobre el uso de la biblioteca resultante.

A continuación, le mostramos un vídeo de un programa que funciona al conectarse al servidor.



Autor: Francis Dube

 
Excelente artículo. Ya era hora de que MT5 tuviera soporte nativo para websocket.
Esperemos que este código se incluya como archivos estándar de MT5.
O mejor aún, que MT5 provea un API websocket nativo por razones de rendimiento.

Gracias por tu esfuerzo.
 
"The release folder contains prebuilt dll and .exe files available for immediate use."

¿Has olvidado la mencionada carpeta Release en tu página de github? ;)

 
MetaQuotes:

El artículo WebSocket para MetaTrader 5 ha sido publicado:

Autor: Francis Dube

WebSocket incluso en implementaciones normales, rápidas y correctas es algo bastante caprichoso. Está contraindicado hacerlo en MQL

imho: o bien debe aparecer de los desarrolladores de terminales o ser proporcionado por DLLs externas

 
¿Por qué es necesario? ¿Por qué necesita Websocket y qué funcionalidad mejora con respecto al mt normal? ¿Puede dar un ejemplo de mejora cuantitativa o cualitativa? Era así, con Websocket es así. Mucho más rápido. ¡Gracias!
 

¿Lo has probado en servidores públicos externos, especialmente con TLS? Sería estupendo ver algún ejemplo.

PS. Te lo pregunto porque tu prueba no funciona con wss://echo.websocket.org (adjunto el log, BTW - ¿por qué escribes tanta información inútil?). Pure ws (puerto 80) funciona bien. En el pasado también intenté ejecutar mi implementación de WebSockets en MQL5, pero fallé porque los sockets de MQL tienen algunas complejidades con la capa TLS. Parece que todavía no están resueltos. Y wss es una necesidad hoy en dia, porque todos los servidores de produccion usan TLS y rechazan conexiones no seguras.

Archivos adjuntos:
log.txt  1113 kb
 
Maxim Kuznetsov:

WebSocket incluso en implementaciones normales, rápidas y correctas es una cosa bastante caprichosa. No se debe hacer en MQL

imho: o bien debe aparecer de los desarrolladores de terminales o ser proporcionado por DLLs externas.

Qué tontería.

Todo funciona perfectamente bien en MQL5.
 
Renat Fatkhullin:
Eso es basura.

Todo funciona perfectamente en MQL5.

No es una tontería sobre MQL en absoluto. Hubo problemas con TLS (escribí sobre ellos en el foro, pero no esperé una solución) y todavía los hay. El ejemplo del artículo no funciona. He adjuntado el log al artículo original en inglés.

Discussion of article "Websockets for MetaTrader 5"
Discussion of article "Websockets for MetaTrader 5"
  • 2020.11.25
  • www.mql5.com
New article Websockets for MetaTrader 5 has been published: Author: Francis Dube...
 
Renat Fatkhullin:
Eso es basura.

Todo funciona perfectamente en MQL5.

Hay un viejo problema wss allí: en la función estándar SocketIsReadable ()
Es elemental para eludir, pero sin esta función.

uint len = 1024; //SocketIsReadable(socket);


 
Roman:

Hay un viejo problema wss allí: en la función estándar SocketIsReadable ()
Solución es elemental, pero ya sin esta función.

¿Hay alguna justificación para esto? ¿Cuál es el número mágico y por qué estaría bien para una longitud de mensaje de 256 o 1500, por ejemplo?

 
Roman:

Hay un viejo problema wss allí: en la función estándar SocketIsReadable ()
Solución es elemental, pero ya sin esta función

Usted simplemente no entiende y no sabe cómo utilizar esta función.

Esta función da instantáneamente el número de bytes disponibles en el buffer de entrada y no te dice que el socket está vivo. La función es muy importante y te permite no entrar en espera síncrona, sino leer los datos porción por porción sin perder el control sobre el programa.

Y las funciones TLS también son correctas - están dadas para usuarios entrenados que saben cómo y en qué secuencia usarlas. No son para los que "llaman y ya está".


No solo eso, las funciones socket y tls son en forma pura las mismas que usa terminal para conexiones raw/tls/https. Es decir, todo funciona bien. Estas mismas implementaciones funcionan en nuestras soluciones de alta carga.

Las funciones de red raw no son para principiantes ni para un uso ingenuo. Uno debe entender los principios y peculiaridades de la interacción de red lo suficientemente bien. Y si estamos hablando de TLS, entonces los métodos y la secuencia de procesamiento del proceso de handshake.