Большинство коннекторов в OsEngine так или иначе используют данную технологию. Особенно это касается бирж криптовалют. Потоковые данные идут именно через данный протокол.
Библиотек для подключения данного протокола великое множество. В этой статье поговорим о библиотеке, которую надо использовать и на что обратить внимание.
WebSocket4Net.
Данная библиотека и реализация вёбсокетов хорошо себя показывают в работе. Её и нужно использовать.
Мы подписываемся на ошибки и на сообщение разрыва сокета. Из сообщения о разрыве выбрасываем DisconnectEvent, метод Dispose для коннектора не трогаем!
Подписка на события открытия и закрытия сокетов в BitgetSpot сервере:
В сервере АЛОР обработка закрытия сокета выглядит так:
И это то, что нужно.
Пока все сокеты не перевелись в состояние Open, мы событие ConnectionEvent выслать на верх не можем, а также не можем менять статус у сервера на Connect.
Иногда вёбсокеты в разных Api имеют различные адреса. Например, в OKX их четыре. И прежде чем переводить статус сервера в Connect, нам необходимо дождаться, пока они все активируются и перейдут в статус Connect.
Для этого в OKX сделан специальный метод, который вызывается после того, как каждый отдельный сокет переходит в статус Connect:
Тоже самое касается коннектора к АЛОР, в котором ДВА сокета. Торговый и для данных отдельно.
Когда приходят какие-то данные, нужно их складывать в конкурентный массив. Уже потом из этого массива другой поток, который только этим и занимается, должен данные конвертировать.
Разбор данных в другом потоке, в другом методе:
Удачных алгоритмов!
Серия о том, как стать настоящим программистом и изменить свою профессию.
Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php
Комментарии открыты для друзей, добавляйтесь!
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients