Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
C вашей библиотекой есть подключение и обмен с локальным сервером.Тестировал таким скриптом:
Подключения к ws://echo.websocket.org выдает 301 редирект на wss://echo.websocket.org.
А подключение к wss://echo.websocket.org не устанавливается с таким сообщением:
Выдана информация о ключе шифрования.
Аналогично ведет себя и байбитовский сервер, тоже выдает информацию о ключе шифрования. Если оба себя так ведут, то видимо проблема общая с шифрованием на стороне клиента. Может какие то заголовки надо добавить? Или какой-то ответ для принятия ключа отправить?
Попробуйте прилагаемый файл. С ним у меня работает эхо wss://echo.websocket.in/, но не работает wss://echo.websocket.org/.
Не понятно, в чем причина. Внутри (в wstransport.mqh) это выглядит на стадии рукопожатия так:
SocketIsReadable возвращает какое-то количество данных, например, 541, но вызов SocketTlsReadAvailable их не читает, то есть buffer остается пустым, а received равно 0. Проверял _LastError после всех вызовов - равно 0.
В принципе, поскольку данные шифруют блоками, вполне допустимо, что из сети приходит не весь блок, и его нельзя расшифровать пока не поступит окончание, но проблема в том, что в данном случае этого не происходит никогда - программа остается в ожидании зашифрованного заголовка.
Тут https://www.mql5.com/ru/docs/network/sockettlshandshake написано, что
Вызов SocketTlsHandshake() не требуется, если подключение осуществляется к порту 443.
И в примере ниже так и сделано
Сделал аналогично в вашем коде в wstransport.mqhно в примере MQL еще 3 команды отправляется в функции TlsHandshake(). Их надо выполнять если SSL порт другой.
Впрочем у меня 443 порт и мне сейчас полная функция TlsHandshake() не нужна.
В общем теперь получаю TLS enabled и скрипт остается работать, но для wss://echo.websocket.org ничего не происходит. Внутрь условия
if(wss.open(headers)){не входит, то есть находится в состоянии подключения.А для байбитовского сервера подключение происходит нормально. И отрабатывает код внутри этого if()
В вашем коде обмен сообщениями пинг-понг происходит? Или это уже мне надо программировать?
Тут https://www.mql5.com/ru/docs/network/sockettlshandshake написано, что
И в примере ниже так и сделано
Сделал аналогично в вашем коде в wstransport.mqhно в примере MQL еще 3 команды отправляется в функции TlsHandshake(). Их надо выполнять если SSL порт другой.
не входит, то есть находится в состоянии подключения.Впрочем у меня 443 порт и мне сейчас полная функция TlsHandshake() не нужна.
В общем теперь получаю TLS enabled и скрипт остается работать, но для wss://echo.websocket.org ничего не происходит. Внутрь условия
А для байбитовского сервера подключение происходит нормально. И отрабатывает код внутри этого if()
В вашем коде обмен сообщениями пинг-понг происходит? Или это уже мне надо программировать?
В приложенном выше патче как раз сделано, чтобы не вызывался SocketTlsHandshake для порта 443, который по умолчанию открывается в TLS. Для другого порта будет вызываться.
Про ситуацию "ничего не происходит" написал выше - функция SocketTlsReadAvailable не считывает имеющиеся данные (если заменить на SocketTlsRead - тупо подвисает на этом вызове), то есть программа продолжает ожидать расшифрованного буфера, но почему-то не получает его. Это вопрос к MetaQuotes.
Фреймы пинг-понга обрабатываются.
В приложенном выше патче как раз сделано, чтобы не вызывался SocketTlsHandshake для порта 443, который по умолчанию открывается в TLS. Для другого порта будет вызываться.
Про ситуацию "ничего не происходит" написал выше - функция SocketTlsReadAvailable не считывает имеющиеся данные (если заменить на SocketTlsRead - тупо подвисает на этом вызове), то есть программа продолжает ожидать расшифрованного буфера, но почему-то не получает его. Это вопрос к MetaQuotes.
Фреймы пинг-понга обрабатываются.
Зависает наверное потому, что вы одним вызовом SocketRead или SocketTlsReadAvailable читаете все данные, а в примере на странице https://www.mql5.com/ru/docs/network/sockettlshandshake данные читаются мелкими порциями и соединяются:
Если так же сделать, то может и wss://echo.websocket.org/ начнет работать.
Зависает наверное потому, что вы одним вызовом SocketRead или SocketTlsReadAvailable читаете все данные, а в примере на странице https://www.mql5.com/ru/docs/network/sockettlshandshake данные читаются мелкими порциями и соединяются:
Если так же сделать, то может и wss://echo.websocket.org/ начнет работать.
Нет. SocketRead для не-TLS режима, и в примере он используется только перед SocketTlsHandshake. И я не использую SocketRead вне TLS-режима. Зачем нужно побайтовое чтение - не понимаю, имхо это плохой пример.
Как я уже писал, мне приходят 541 raw-байт зашифрованного заголовка. Да, я могу их прочитать SocketRead (целиком или побайтово - неважно) и получаю в них "кашу", потому что они зашифрованы и могут быть прочитаны только функциями с Tls-суффиксом. А эти функции "ждут" завершения блока.
ЗЫ. Сейчас для прикола добавил вызов SocketTlsRead(handle, buffer, 1), то есть чтение одного байта - он тоже "висит" несмотря на наличие данных в системном сокете.Короче - echo.websocket.org - глючный сервер (на него есть жалобы на гитхабе) или как минимум в чем-то несовместимый с MQL5 TLS-реализацией.
Используйте echo.websocket.events вместо него. От меня работает.
Спасибо за рабочую библиотеку)
Что-то перестал открываться апи-сайт. У всех так или только у меня? Основной сайт и ЛК работает.
https://api.bybit.com/v5/market/instruments-symbol_info?category=linear&limit=1000
Что-то перестал открываться апи-сайт. У всех так или только у меня? Основной сайт и ЛК работает.
https://api.bybit.com/v5/market/instruments-symbol_info?category=linear&limit=1000
У меня работает
2025.05.12 10:13:54.016 WebRequest time: 292 ms
Может лимиты превышены - читал что дают бан за это на 10 минут.2025.05.12 10:13:54.045 Deserialize time: 28 ms
2025.05.12 10:13:54.046 Create new symbol 1000000BABYDOGEUSDT.bbt.linear
2025.05.12 10:13:54.048 Create new symbol 1000000CHEEMSUSDT.bbt.linear
2025.05.12 10:13:54.049 Create new symbol 1000000MOGUSDT.bbt.linear
2025.05.12 10:13:54.052 Create new symbol 1000000PEIPEIUSDT.bbt.linear
У меня работает
2025.05.12 10:13:54.016 WebRequest time: 292 ms
Может лимиты превышены - читал что дают бан за это на 10 минут.2025.05.12 10:13:54.045 Deserialize time: 28 ms
2025.05.12 10:13:54.046 Create new symbol 1000000BABYDOGEUSDT.bbt.linear
2025.05.12 10:13:54.048 Create new symbol 1000000CHEEMSUSDT.bbt.linear
2025.05.12 10:13:54.049 Create new symbol 1000000MOGUSDT.bbt.linear
2025.05.12 10:13:54.052 Create new symbol 1000000PEIPEIUSDT.bbt.linear
Да не понятно, запросами не бомбил точно, еще 10 мая все работало. Может провайдер чудит - буду разбираться.
Так ссылка открывается у Вас в броузере?