Native Websocket
- Библиотеки
- Racheal Samson
- Версия: 1.418
- Обновлено: 10 января 2025
- Активации: 15
- ws:// и wss:// (защищенный веб-сокет "TLS")
- текстовые и бинарные данные
Он обрабатывает:
- фрагментированное сообщение автоматически (передача больших объемов данных)
- кадры пинг-понга автоматически (подтверждение активности)
Преимущества:
- DLL не требуется.
- Установка OpenSSL не требуется.
- До 128 соединений Web Socket из одной программы
- Различные уровни журнала для отслеживания ошибок
- Возможна синхронизация с виртуальным хостингом MQL5.
- Полностью родной для MQL5.
Пример кода ниже:
//подключаем WSMQL.mqh — файл, содержащий все объявления, необходимые для взаимодействия с библиотекой #include <WSMQL.mqh> //Методы ниже //класс CWebSocketClient { //public: //bool Initialized(void); //Проверяет, инициализирован ли клиент WebSocket. //ENUM_WEBSOCKET_STATE State(void); //Возвращает текущее состояние соединения WebSocket. //void SetMaxSendSize(int max_send_size); //Устанавливает максимальный размер отправки для сообщений WebSocket. //bool SetOnMessageHandler(OnWebsocketMessage callback); //Устанавливает функцию обратного вызова для обработки входящих текстовых сообщений. //bool SetOnPingHandler(OnWebsocketMessage callback); //Устанавливает функцию обратного вызова для обработки входящих сообщений ping. //bool SetOnPongHandler(OnWebsocketMessage callback); //Устанавливает функцию обратного вызова для обработки входящих сообщений Pong. //bool SetOnCloseHandler(OnWebsocketMessage callback); //Устанавливает функцию обратного вызова для обработки закрытия соединений WebSocket. //bool SetOnBinaryMessageHandler(OnWebsocketBinaryMessage callback); //Устанавливает функцию обратного вызова для обработки входящих двоичных сообщений. //bool Connect(const string url, const uint port = 443, const uint timeout = 5000, bool use_tls = true, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); //Подключаемся к серверу WebSocket. //bool ConnectUnsecured(const string url, const uint port = 80, const uint timeout = 5000, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); //Подключается к серверу WebSocket, используя незащищенное соединение. //bool ConnectSecured(const string url, const uint port = 443, const uint timeout = 5000, ENUM_LOG_LEVEL log_level = LOG_LEVEL_NONE); //Подключается к серверу WebSocket, используя защищенное соединение. //bool Disconnect(ENUM_CLOSE_CODE close_code = NORMAL_CLOSE, const string msg = ""); //Отключаемся от сервера WebSocket. //int SendString(const string message); //Отправляет string сообщение на сервер WebSocket. //int SendData(uchar& message_buffer[]); //Отправляет двоичные данные на сервер WebSocket. //int SendPong(const string msg = ""); //Отправляет сообщение Pong на сервер WebSocket. //int SendPing(const string msg); //Отправляет сообщение ping на сервер WebSocket. //uint ReadString(string& out); //Читает string сообщение с сервера WebSocket. //uint ReadStrings(string& out[]); //Читает несколько строковых сообщений с сервера WebSocket. //uint OnReceiveString(); //Получает и обрабатывает входящие строковые сообщения. //uint OnReceiveBinary(); //Получает и обрабатывает входящие двоичные сообщения. //uint OnMessage(); //Получает и обрабатывает входящие сообщения WebSocket. //}; //Создаём экземпляр Клиента CWebSocketClient client;//Я объявил это глобально, потому что этого требует OnPingMessage //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //Проверяем, инициализирован ли клиент if (!client.Initialized()) { ZeroHandle();//Очистка всех клиентов return; } //Устанавливаем обработчик OnMessage для получения текстовых сообщений client.SetOnMessageHandler(OnWMessage);//используем SetOnBinaryMessageHandler для двоичных сообщений //Устанавливаем обработчик OnPing для получения пинг-сообщений, Pong будет автоматически отправляться при отсутствии этого обработчика client.SetOnPingHandler(OnPingMessage);//используем SetOnPongHandler для сообщений понг //URL-адрес и объявление сообщения string url = "stream.binance.com/ws";//или wss://stream.binance.com/ws string msg = "{\"params\":[\"btcusdt@bookTicker\"],\"method\":\"SUBSCRIBE\",\"id\":27175}"; //ВНИМАНИЕ: убедитесь, чтоstream.binance.com добавлен в список WebRequest на вкладке «Параметры» -> «Советники». //Подключаемся к серверу WebSocket //if (!client.Connect(url/*, 80, 5000, false, LOG_LEVEL_INFO */)) { //Полностью настраиваемый //if (!client.ConnectUnsecured(url/*, 80, 5000, LOG_LEVEL_INFO */)) { //Для соединения без TLS (незащищенного) if (!client.ConnectSecured(url/*, 443, 5000, LOG_LEVEL_INFO */)) { ZeroHandle();//Очистка всех клиентов return; } //Отправляем string сообщение client.SendString(msg); //Обрабатываем сообщения, пока скрипт не будет остановлен while (true) { if (IsStopped()) break; //Получаем все сообщения и обрабатываем их, используя соответствующие On{Message | BinaryMessage | Ping | Pong | Close} callback (обработчик) uint frames = client.OnMessage(); //Получаем строковые сообщения и обрабатываем их с помощью обратного вызова OnMessage // uint frames = client.OnReceiveString(); Print("Обработано кадров: ", frames); } //Отключаемся от сервера WebSocket Print("Отключение..."); if (client.Disconnect()) { ZeroHandle();//Очистка всех клиентов Print("Отключено!"); } } //+------------------------------------------------------------------+ void OnWMessage(string message) { Print(message); } //+------------------------------------------------------------------+ void OnPingMessage(string message) { Print("пинг получен:", message); if (client.SendPong() > 0) { Print("Понг успешно отправлен."); } else { Print("Не удалось отправить понг."); } } //Пример вывода: //{"result":null,"id":27175} //Обработано кадров: 1 //--- //{"u":35893555769,"s":"BTCUSDT","b":"27812.78000000","B":"7.14299000","a":"27812.79000000","A":"0.81665000"} //{"u":35893555770,"s":"BTCUSDT","b":"27812.78000000","B":"7.14299000","a":"27812.79000000","A":"0.82309000"} //{"u":35893555771,"s":"BTCUSDT","b":"27812.78000000","B":"7.14964000","a":"27812.79000000","A":"0.82309000"} //Обработано кадров: 3 //--- //Обработано кадров: 1 //получен пинг: пинг //Понг отправлен успешно.
Не стесняйтесь обращаться ко мне за поддержкой и вопросами до/после покупки.

This library is amazing. I had some issues because the library was not in the right folder but after fixing that, everything worked. Good job. PS: It seems that LOG_LEVEL_NONE is not working, I get debug level with that or maybe I'm not using it right, anyway, I put LOG_LEVEL_ERROR to not be spammed by logs