Native Websocket
- Библиотеки
- Racheal Samson
- Версия: 1.39
- Обновлено: 13 августа 2024
- Активации: 15
- ws:// и wss:// (защищенный веб-сокет "TLS")
- текстовые и бинарные данные
Он обрабатывает:
- фрагментированное сообщение автоматически (передача больших объемов данных)
- кадры пинг-понга автоматически (подтверждение активности)
Преимущества:
- DLL не требуется.
- Установка OpenSSL не требуется.
- До 128 соединений WebSocket из одной программы
- Различные уровни журнала для отслеживания ошибок
- Возможна синхронизация с виртуальным хостингом MQL5.
- Полностью родной для MQL5.
Пример кода ниже:
//Включить WSMQL.mqh — файл со всеми объявлениями, необходимыми для взаимодействия с библиотекой #include <WSMQL.mqh> // Методы ниже // class CWebSocketClient { // public: // WSHANDLE Initialize(void); // void ZeroHandle(void); // ENUM_WEBSOCKET_STATE ClientState(WSHANDLE handle); // void SetMaxSendSize(WSHANDLE handle, int max_send_size); // void SetOnMessageHandler(OnWebsocketMessage callback); // void SetOnBinaryMessageHandler(OnWebsocketBinaryMessage callback); // bool Connect(const WSHANDLE handle, const string url, const uint port = 443, const uint timeout = 5000, bool use_tls = true, ENUM_LOG_LEVEL log_level = LOG_LEVEL_ERROR); // bool Disconnect(WSHANDLE handle, ENUM_CLOSE_CODE close_code = NORMAL_CLOSE, const string msg = ""); // int SendString(WSHANDLE handle, const string message); // int SendData(WSHANDLE handle, uchar& message_buffer[]); // int SendPong(WSHANDLE handle, const string msg = ""); // int SendPing(WSHANDLE handle, const string msg); // uint ReadString(WSHANDLE handle, string& out); // uint ReadBinary(WSHANDLE handle, uchar& out[]); // uint ReadStrings(WSHANDLE handle, string& out[]); // uint OnReceiveString(WSHANDLE handle); // uint OnReceiveBinary(WSHANDLE handle); // } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { // Создать экземпляр клиента CWebSocketClient client; // Проверить, инициализирован ли клиент if (!client.Initialized()) { ZeroHandle(); // Очистить всех клиентов return ; } // Установить обработчик OnMessage client.SetOnMessageHandler(OnWMessage); // использовать OnReceiveBinary для двоичных сообщений // URL и объявление msg 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, 443)) { ZeroHandle(); // Очистить всех клиентов return ; } // Отправить строковое сообщение client.SendString(msg); // Обрабатывать сообщения до тех пор, пока скрипт не будет остановлен while (true) { if (IsStopped()) break; // Получить строковые сообщения и обработать их с помощью обратного вызова OnMessage uint frames = client.OnReceiveString(); Print("Обработано кадров : ", frames); } // Отключиться от сервера WebSocket Print("Отключение..."); if (client.Disconnect()) { ZeroHandle(); // Очистить всех клиентов Print("Отключено!"); } } //+------------------------------------------------------------------+ void OnWMessage( string message) { Print(message); } //+------------------------------------------------------------------+ //Примеры выходных данных: //{"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
Не стесняйтесь обращаться ко мне за поддержкой и вопросами до/после покупки.
https://www.mql5.com/en/users/nikkirachael
Awesome support from Racheal, thanks for your help setting up the library, keep up the great work ;)