Обсуждение статьи "Разработка MQTT-клиента для MetaTrader 5: методология TDD"

 

Опубликована статья Разработка MQTT-клиента для MetaTrader 5: методология TDD:

Статья представляет собой первую попытку разработать нативный MQTT-клиент для MQL5. MQTT - это протокол обмена данными по принципу "издатель - подписчик". Он легкий, открытый, простой и разработан так, чтобы его было легко внедрить. Это позволяет применять его во многих ситуациях.

Несмотря на то, что протокол должен был отличаться надежностью, быстротой и дешевизной из-за технологических ограничений и высоких сетевых затрат, от него требовалось обеспечить качественную доставку данных с непрерывным отображением данных о сеансе (session awareness), что позволяло бы ему справляться с ненадежным или даже прерывистым Интернет-соединением.

Будучи двоичным протоколом, MQTT очень эффективен с точки зрения требований к памяти и обработке. Любопытно, что самый маленький пакет MQTT размером всего в два байта!


Так как протокол работает по принципу "издатель/подписчик" (pub/sub), он, в отличие от основанных на принципе "запрос/ответ", является двунаправленным. Другими словами, как только соединение клиент/сервер установлено, данные могут передаваться от клиента к серверу и от сервера к клиенту в любое время без необходимости предварительного запроса, в отличие от HTTP WebRequest. Как только данные поступают, сервер немедленно пересылает их получателям. Эта особенность является краеугольным камнем обмена данными в реальном времени, поскольку она позволяет добиться минимальных задержек между конечными точками. Некоторые поставщики заявляют о задержке порядка миллисекунд.

Автор: Jocimar Lopes

 
Хорошая статья.

Несколько месяцев назад я перевел библиотеку PubSubClient на MQL5.
https://github.com/gmag11/MQTT-MQL5-Library
 

Привет, Jocimar,

Спасибо за этот замечательный учебник. У меня возникли проблемы с выполнением части 2, и если возможно, я хотел бы получить вашу помощь. Я работаю под Windows 10 и без WSL.
Я установил mosquitto и запустил службу, набрав (из папки установки):

net start mosquitto

и служба успешно запускается на порту по умолчанию 1883. Далее, чтобы найти broker_ip я запускаю:

ipconfig/all

и получаю соответствующий IP-адрес, который в дальнейшем используется для перенаправления сетевого трафика с 80 или 443 (я пробовал оба) на broker_ip, найденный с помощью вышеуказанной команды. Перенаправление происходит при наборе следующей команды:

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

Затем я заполняю скрипт портом и broker_ip и выполняю его. Я получаю код ошибки 5272, что означает "Не удалось подключиться к удаленному хосту". Конечно, я включил broker_ip во вкладку Expert options.

Может быть, я что-то упускаю во всем этом процессе?

Заранее спасибо,
Dr.Pip

 
DrPip83 код ошибки 5272, что означает "Не удалось подключиться к удаленному хосту". Конечно, я включил broker_ip во вкладку Expert options.

Может быть, я что-то упускаю во всем этом процессе?

Заранее спасибо,
Dr.Pip

Здравствуйте, DrPip83

Я заметил, что вы задавали этот вопрос сорок дней назад. Я не видел его раньше. Сейчас я получил сообщение от администратора по поводу вашего вопроса. Прошу прощения за столь долгую задержку.

К делу: какой скрипт вы используете для подключения? Не могли бы вы поделиться им? Во второй части у нас **нет функционального соединения** с брокером. До этого момента у нас были только пакеты, создающие заглушки, первые классы, которые мы прототипировали. Мы экспериментировали с соединениями "внеполосно", скажем так, используя только внутренние скрипты, не распространяемые на вложениях. Только сейчас мы реализуем реальные соединения в так называемом операционном поведении протокола (или в действиях, согласно стандарту).

Так что, не могли бы вы поделиться своим скриптом? Может быть, я смогу помочь с ним или поделиться с вами скриптами, которые мы использовали для этой цели.

 
Интересует, опубликовали ли вы уже что-нибудь на GitHub? Хотел бы взглянуть и внести свой вклад, если смогу!