Native Websocket
- Библиотеки
- Racheal Samson
- Версия: 1.417
- Обновлено: 1 октября 2024
- Активации: 15
- ws:// и wss:// (защищенный веб-сокет "TLS")
- текстовые и бинарные данные
Он обрабатывает:
- фрагментированное сообщение автоматически (передача больших объемов данных)
- кадры пинг-понга автоматически (подтверждение активности)
Преимущества:
- DLL не требуется.
- Установка OpenSSL не требуется.
- До 128 соединений WebSocket из одной программы
- Различные уровни журнала для отслеживания ошибок
- Возможна синхронизация с виртуальным хостингом 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 //получен пинг: пинг //Понг отправлен успешно.
Не стесняйтесь обращаться ко мне за поддержкой и вопросами до/после покупки.
https://www.mql5.com/en/users/nikkirachael
This, Native WebSocket library by Racheal Samson is fast, handles secure wss:// connections effortlessly, and can manage large data transfers with ease.
I love that it's fully native to MQL5, with no extra installations required.
What really stood out was the author's quick response and genuine willingness to help, making the experience even smoother. Highly recommend both the library and the excellent support behind it!