rss

Профиль компании

Финансовые компании

Блог компании Os_Engine | Стандарты кода #10. WebSocket и потоковые данные. Коннекторы для OsEngine #32.

Большинство коннекторов в OsEngine так или иначе используют данную технологию. Особенно это касается бирж криптовалют. Потоковые данные идут именно через данный протокол.

Библиотек для подключения данного протокола великое множество. В этой статье поговорим о библиотеке, которую надо использовать и на что обратить внимание.

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

 

Работающая библиотека.

WebSocketSharp.

Данная библиотека и реализация вёбсокетов хорошо себя показывают в работе. Её и нужно использовать. Работает как со строками, так и с шифрованными данными.

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

 Все остальные библиотеки, если Вы вдруг захотите их использовать — нужно согласовывать.

Обязательная подписка на ошибки и disconnect.

Мы подписываемся на ошибки и на сообщение разрыва сокета. Из сообщения о разрыве выбрасываем DisconnectEvent, метод Dispose для коннектора не трогаем!

Подписка на события открытия и закрытия сокетов в BitgetSpot сервере:

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

В сервере АЛОР обработка закрытия сокета выглядит так:

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

И это то, что нужно.

  1. Сообщения о разрыве сокета.
  2. Если статус сервера ещё не Disconnect, меняем его статус и выбрасываем на верх событие разрыва соединения.

 

На старте ждём все сокеты.

Пока все сокеты не перевелись в состояние Open, мы событие ConnectionEvent выслать на верх не можем, а также не можем менять статус у сервера на Connect.

Иногда вёбсокеты в разных Api имеют различные адреса. Например, в OKX их четыре. И прежде чем переводить статус сервера в Connect, нам необходимо дождаться, пока они все активируются и перейдут в статус Connect.

Для этого в OKX сделан специальный метод, который вызывается после того, как каждый отдельный сокет переходит в статус Connect:

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

Тоже самое касается коннектора к АЛОР, в котором ДВА сокета. Торговый и для данных отдельно.

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

  1. Происходит событие открытия сокета для чтения данных по портфелю.
  2. Происходит событие открытия сокета данных.
  3. Только после первых двух пунктов происходит перевод состояния коннектора в Connect.

 

Не разбираем сообщения потоком сокета!!!

Когда приходят какие-то данные, нужно их складывать в конкурентный массив. Уже потом из этого массива другой поток, который только этим и занимается, должен данные конвертировать.

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

Разбор данных в другом потоке, в другом методе:

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

Удачных алгоритмов!

Пост из серии «Коннекторы к OsEngine»

Серия о том, как стать настоящим программистом и изменить свою профессию.

Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php

Комментарии открыты для друзей, добавляйтесь!

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

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

Стандарты кода #10.  WebSocket и потоковые данные. Коннекторы для OsEngine #32.

★1

теги блога Алексей Ван <o-s-a.net>

....все тэги



UPDONW
Новый дизайн