rss

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

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

Блог компании Os_Engine | IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

В данной статье поговорим о том, каким образом AServer вызывает методы IServerRealization.

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

1. IServerRealization в проекте.

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

2. OsEngine вызывает методы класса IServerRealization семью способами!!!

2.1. Первый поток.

Полностью защищённый поток AServer, который запрашивает нужные методы, касающиеся старта коннектора:

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

  1. Вызывается из AServer, для чего там работает поток в методе: PrimeThreadArea().
  2. Одновременно может быть вызван только один из этих четырёх методов.
  3. Connect вызывается тогда, когда пользователь запросил подключение или после реконнекта. Будет вызываться раз в 300 секунд до победы.
  4. Dispose вызывается тогда, когда пользователь запросил отключение коннектора. Либо сразу перед вызовом метода Connect, т.к. нужно очистить память и все объекты от предыдущего подключения.
  5. GetSecurities вызывается единожды после того, как статус сервера был сменен на Connect (из IServerRealization было вызвано событие ConnectEvent). Если мы уже имеем список бумаг по коннектору, второй раз вызван не будет.
  6. GetPortfolios вызывается единожды после того, как статус сервера был сменен на Connect (из IServerRealization было вызвано событие ConnectEvent). Если мы уже имеем список портфелей по коннектору, второй раз вызван не будет.

 

2.2. Второй поток.

Очередь потоков из AServer на подписку бумаг на трейды и стаканы:

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

  1. Базово вызывается из десятков и сотен CandleConnector, которые AServer ставит в очередь методом блокировки многопоточного доступа к IServerRealization.
  2. Очень загруженное место. Многие пользователи запускают одновременно тысячи бумаг на подписку. И этот метод может вызываться буквально тысячи раз за первые минуты после старта коннектора. Не забывайте про RateGate и защиту коннектора от спама: https://smart-lab.ru/company/os_engine/blog/973568.php
  3. Вызывается, только если состояние сервера ServerConnectStatus == Connect.
  4. Вызывается, только если прошло не менее 15 секунд после того, как коннектор перешёл в статус Connect.
  5. Вызывается AServer не чаще 10 раз в одну секунду.
  6. Если этот метод вызывался, нужно подписаться на трейды и стаканы по бумаге. Уже должно быть можно, либо вы что-то напутали со статусами.
  7. Обязательно сохраняйте в реализации сервера список ранее подписанных бумаг. Защиты от «двойной и тройной» подписки в AServer нет. Данная защита на IServerRealization.

 

2.3. Третий поток.

Работа с базовыми методами управления ордерами:

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

  1. Вызывается из AServer, для чего там работает поток в методе: ExecutorOrdersThreadArea().
  2. Вызывается, только если состояние сервера ServerConnectStatus == Connect.
  3. Вызывается, только если прошло не менее N секунд в поле WaitTimeSecondsAfterFirstStartToSendOrders, IServerPermission для данного типа коннектора.

 

2.4. Четвёртый поток.

Каждая серия свечек нуждается в запуске и активации. Над этим работает отдельный поток, активирующий их в классе CandleConnector. Про это можно почитать здесь: https://smart-lab.ru/company/os_engine/blog/975825.php

В IServerRealization данных поток вызывает вот этот метод:

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

  1. Вызывается, когда коннектор имеет статус Connect.
  2. Вызывается столько раз, сколько подключено источников у роботов. По одному за раз.

 

2.5. Пятый поток OsData.

OsData имеет свои отдельные очереди для запроса данных.

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

  1. Вызывается, когда коннектор имеет статус Connect.
  2. По одному за раз. Вызовы защищены от многопоточного доступа очередью в OsData.

 

2.6. Шестой поток – Отзыв всех ордеров пользователем из меню.

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

  1. Вызывается, когда коннектор имеет статус Connect.

 

2.7. Вызов во время ручного закрытия позиции по инструменту.

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

  1. Вызывается, когда коннектор имеет статус Connect.
  2. Вызывается механизмом отзыва позиции с рынка по инструменту.

 

3. Как устроить поточную модель IServerRealization?

Несмотря на то, что и так у нас тут целый потокозоопарк, без них совсем в реализации не выйдет.

Я настаиваю на том, что в IServerRealization должна быть минимум ОДНА очередь со своим потоком, которая будет разбирать от сервера сообщения о трейдах, ордерах и портфелях. Если нужно, дополнительно поток, пингующий сервер.

Подробнее можно и нужно читать в этой статье: https://smart-lab.ru/company/os_engine/blog/970542.php

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


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

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

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

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

OsEngine: https://github.com/AlexWan/OsEngine
FAQ: https://o-s-a.net/os-engine-faq
Поддержка OsEngine: https://t.me/osengine_official_support

Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php

IServerRealization #2. Кто запрашивает методы реализации? Коннекторы к OsEngine #50

★3
1 комментарий
Интересно, что было бы с сайтом «Смарт Лаб», окажись Вы на этом месте? Кстати, Бил Гейтс опять вырвался вперед
avatar

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

....все тэги



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