В данной статье поговорим о том, каким образом AServer вызывает методы IServerRealization.
1. IServerRealization в проекте.
2. OsEngine вызывает методы класса IServerRealization семью способами!!!
2.1. Первый поток.
Полностью защищённый поток AServer, который запрашивает нужные методы, касающиеся старта коннектора:
- Вызывается из AServer, для чего там работает поток в методе: PrimeThreadArea().
- Одновременно может быть вызван только один из этих четырёх методов.
- Connect вызывается тогда, когда пользователь запросил подключение или после реконнекта. Будет вызываться раз в 300 секунд до победы.
- Dispose вызывается тогда, когда пользователь запросил отключение коннектора. Либо сразу перед вызовом метода Connect, т.к. нужно очистить память и все объекты от предыдущего подключения.
- GetSecurities вызывается единожды после того, как статус сервера был сменен на Connect (из IServerRealization было вызвано событие ConnectEvent). Если мы уже имеем список бумаг по коннектору, второй раз вызван не будет.
- GetPortfolios вызывается единожды после того, как статус сервера был сменен на Connect (из IServerRealization было вызвано событие ConnectEvent). Если мы уже имеем список портфелей по коннектору, второй раз вызван не будет.
2.2. Второй поток.
Очередь потоков из AServer на подписку бумаг на трейды и стаканы:
- Базово вызывается из десятков и сотен CandleConnector, которые AServer ставит в очередь методом блокировки многопоточного доступа к IServerRealization.
- Очень загруженное место. Многие пользователи запускают одновременно тысячи бумаг на подписку. И этот метод может вызываться буквально тысячи раз за первые минуты после старта коннектора. Не забывайте про RateGate и защиту коннектора от спама: https://smart-lab.ru/company/os_engine/blog/973568.php
- Вызывается, только если состояние сервера ServerConnectStatus == Connect.
- Вызывается, только если прошло не менее 15 секунд после того, как коннектор перешёл в статус Connect.
- Вызывается AServer не чаще 10 раз в одну секунду.
- Если этот метод вызывался, нужно подписаться на трейды и стаканы по бумаге. Уже должно быть можно, либо вы что-то напутали со статусами.
- Обязательно сохраняйте в реализации сервера список ранее подписанных бумаг. Защиты от «двойной и тройной» подписки в AServer нет. Данная защита на IServerRealization.
2.3. Третий поток.
Работа с базовыми методами управления ордерами:
- Вызывается из AServer, для чего там работает поток в методе: ExecutorOrdersThreadArea().
- Вызывается, только если состояние сервера ServerConnectStatus == Connect.
- Вызывается, только если прошло не менее N секунд в поле WaitTimeSecondsAfterFirstStartToSendOrders, IServerPermission для данного типа коннектора.
2.4. Четвёртый поток.
Каждая серия свечек нуждается в запуске и активации. Над этим работает отдельный поток, активирующий их в классе CandleConnector. Про это можно почитать здесь: https://smart-lab.ru/company/os_engine/blog/975825.php
В IServerRealization данных поток вызывает вот этот метод:
- Вызывается, когда коннектор имеет статус Connect.
- Вызывается столько раз, сколько подключено источников у роботов. По одному за раз.
2.5. Пятый поток OsData.
OsData имеет свои отдельные очереди для запроса данных.
- Вызывается, когда коннектор имеет статус Connect.
- По одному за раз. Вызовы защищены от многопоточного доступа очередью в OsData.
2.6. Шестой поток – Отзыв всех ордеров пользователем из меню.
- Вызывается, когда коннектор имеет статус Connect.
2.7. Вызов во время ручного закрытия позиции по инструменту.
- Вызывается, когда коннектор имеет статус Connect.
- Вызывается механизмом отзыва позиции с рынка по инструменту.
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
Поддержка 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