Обсуждение статьи "WebSocket для MetaTrader 5"

 

Опубликована статья WebSocket для MetaTrader 5:

До появления сетевых функций в обновленном MQL5 API, приложения MetaTrader были ограничены в возможности подключаться и взаимодействовать с сервисами на основе протокола WebSocket. Сейчас ситуация изменилась. В этой статье мы рассмотрим реализацию библиотеки WebSocket на чистом MQL5. Будут представлены краткое описание протокола WebSocket и пошаговое руководство по использованию полученной библиотеки.

Ниже представлено видео программы, работающей при подключении к серверу.


Автор: Francis Dube

 
Отличная статья. Давно пора, чтобы в MT5 появилась встроенная поддержка websocket.
Надеюсь, этот код будет включен в стандартные включаемые файлы MT5.
А еще лучше, если MT5 предоставит родной websocket API для повышения производительности.

Спасибо за ваши усилия.
 
"The release folder contains prebuilt dll and .exe files available for immediate use."

Вы забыли упомянуть папку Release на вашей странице github? ;)

 
MetaQuotes:

Опубликована статья WebSocket для MetaTrader 5:

Автор: Francis Dube

WebSocket даже в нормальных, быстрых и правильных реализациях довольно капризная штука. Её противопоказано делать на MQL

imho: или оно должно появится от разработчиков терминала или обеспечиваться внешними DLL

 
Зачем это нужно? Зачем нужен Websocket и какой функционал он улучшает в сравнении с обычным мт. Можно пример количественного или качественного улучшения. Было так, с Websocket стало так. Во столько раз быстрее.  Спасибо! 
 

Вы тестировали его на внешних публичных серверах, особенно с TLS? Было бы здорово увидеть пример(ы).

PS. Я спрашиваю, потому что ваш тест не работает с wss://echo.websocket.org (я прикрепляю лог, BTW - зачем вы пишете такую громоздкую бесполезную информацию?). Чистый ws (порт 80) работает нормально. В прошлом я также пытался запустить свою реализацию WebSockets на MQL5, но потерпел неудачу, потому что сокеты MQL имеют некоторые сложности с уровнем TLS. Похоже, они до сих пор не решены. А wss в наше время просто необходим, так как все рабочие сервера используют TLS и отклоняют небезопасные соединения.

Файлы:
log.txt  1113 kb
 
Maxim Kuznetsov:

WebSocket даже в нормальных, быстрых и правильных реализациях довольно капризная штука. Её противопоказано делать на MQL

imho: или оно должно появится от разработчиков терминала или обеспечиваться внешними DLL

Чушь какая.

Все отлично работает в MQL5.
 
Renat Fatkhullin:
Чушь какая.

Все отлично работает в MQL5.

Вовсе не чушь относительно MQL. Тут с TLS как были проблемы (я о них писал на форуме, но решения не дождался), так и остались. Пример из статьи не работает. Лог я приложил к оригиналу английской статьи.

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:
Чушь какая.

Все отлично работает в MQL5.

Там есть старая проблема wss: в штатной функции  SocketIsReadable ()
Обходится элементарно, но уже без этой функции.

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

 


 
Roman:

Там есть старая проблема wss: в штатной функции  SocketIsReadable ()
Обходится элементарно, но уже без этой функции.

Есть какое-нибудь обоснование? Что за магическое число и почему оно подойдет для сообщения длиной 256 или 1500, например?

 
Roman:

Там есть старая проблема wss: в штатной функции  SocketIsReadable ()
Обходится элементарно, но уже без этой функции

Вы просто не понимаете и не умеете пользоваться этой функцией.

Эта функция моментально выдает доступное количество пришедших байт во входном буфере, а не говорит о том, что сокет живой. Функция очень важна и позволяет не уходить в синхронное ожидание, а вычитывать порционно данные, не теряя контроля над программой.

И TLS функции тоже правильные - они ведь даны для подготовленных пользователей, которые знают как и в какой последовательности ими пользоваться. Они не для тех, кто «вызвал и все».


Мало того, сокетные и tls функции в чистом виде те же самые, что использует терминал для raw/tls/https соединений терминал. То есть, все отлично работает. Эти же реализации работают в наших высоконагруженных решениях.

Сырые сетевые функции не для новичков и не для наивного использования. Надо достаточно хорошо понимать принципы и особенности сетевого взаимодействия. А если речь об TLS, то методы и последовательность  обработки handshake процесса.