У нас есть программное обеспечение для «копирования сделок», которое, как следует из названия, используется для отражения сделок от одного трейдера (отправителя) к нескольким другим трейдерам (получателям). Он состоит из трех основных компонентов:
<сильный>1. Клиент отправителя.
<сильный>2. Сервер.
<сильный>3. Клиент получателя.
Отправитель -> Сервер -> Получатель
Отправитель создается с помощью скрипта MQL. MQL — это язык программирования для трейдеров, созданный на C++. Поскольку есть один отправитель, код отправителя отправляет торговую информацию (или сигнал) на сервер. Сервер основан на PHP с простой базой данных MySQL, где администратор может поддерживать пользователей, которым перенаправляется этот сигнал. Приемник также построен с использованием MQL. Но в настоящее время он построен с использованием уникальной техники, чтобы было ясно, что мы не уверены в этом, потому что мы впервые получаем код, а оригинального программиста нигде не видно (как и ожидалось). Итак, вернемся к проблеме: у клиента-получателя есть фрагмент кода, который, кажется, «опрашивает» сервер на наличие обновлений. MQL использовал библиотеку C++ для вызова функции InternetReadFile, которая использует InternetOpenUrlA. Теперь MQL отправляет запрос на сервер каждые X миллисекунд, чтобы узнать, есть ли новый сигнал, и извлекает его, если он найден. Если предоставление кода MQL поможет, я могу это сделать.
Теперь к моим вопросам.
Это хороший подход? Что произойдет, если количество принимающих пользователей увеличится на сотни, и каждый из них будет «опрашивать» сервер (или что-то еще, что он делает с помощью InternetReadFile) каждые X миллисекунд. В зависимости от X, не убьет ли он ЦП сервера в какой-то момент? Я вижу, что это реализовано как служба извлечения, тогда как я считаю, что сервер должен выталкивать эту информацию, а не постоянно запрашивать все клиенты-получатели.
Если ответ на приведенный выше вопрос «это плохой подход», то какой подход лучше всего? Является ли хорошей идеей передача сигналов через сокеты от сервера к каждому из приемников? Ожидаются ли такие проблемы, как «переадресация портов» и «изменение IP-адресов» на стороне клиента-получателя? Или их можно программно побороть?
Рад предоставить код, дополнительные разъяснения.