finnhub-proxy.py исполняемый в интерпретаторе python 3 файл.
Параметры командной строки:
finnhub-proxy.py -h
usage: finnhub-proxy.py [-h] [-s STOP] [-b BACKGROUND]
optional arguments:
-h, --help show this help message and exit
-s STOP, --stop STOP
-b BACKGROUND, --background BACKGROUND
При запуске без параметров, работает в терминале.
Для завершении работы необходимо нажать CTRL + C
Ведет журнал: /var/log/finnhubproxy.log
Для запуска в качестве системной службы:
/opt/finnhub-proxy/finnhub-proxy.py -b BACKGROUND
Для остановки запущенной службы:
/opt/finnhub-proxy/finnhub-proxy.py -s STOP
Добавить в CRON для перезапуска в случае падения:
/opt/finnhub-proxy/finnhub-proxy.py -b BACKGROUND >/dev/null 2>&1
Режимы работы прокси сервера:
Открывает порт для входящих соединений 127.0.0.1:9001
NGINX проксирует запрос с использованием SSL сертификата на порт 8020
Обработка входящих команд:
При подключении доступна команда auth
После успешной авторизации, становятся доступны команды: subscribe, unsubscribe.
В случае неудачи, соединение разрывается.
Команда subscribe - осуществляет подписку на symbol. Данные немедленно начнут поступать из входящего потока.
Команда unsubscribe — прекращает поток данных по указанному symbol.
Команды поступают в формате JSON:
{"type":"auth","login":"admin","password":"admin"}
{"type":"subscribe","symbol":"BINANCE:BTCUSDT"}
{"type":"unsubscribe","symbol":"BINANCE:BTCUSDT"}
1. Реализация менеджера управления подписками.
Микросервис открывает порт для входящих подключений — сервер.
Клиент из браузера, подключается к серверу, средствами JS устанавливает постоянное соединение с сервером используя SOCKET.
Например:
const socket = new WebSocket('wss://ws.domain.ru’);
Обмен данными ведется в формате JSON.
При подключении к серверу, генерируется уникальный ID сеанса — XAUTHTOKEN.
Клиент отправляет запрос содержащий XAUTHTOKEN и нужные пары полей данных для подписки.
В ответ, клиент непрерывно получает данные из SOCKET по полям на которые сделана подписка.
При новой подписке все предыдущие удаляются. Все подписки хранятся в таблице подписок, в качестве свойств объекта по ключу из XAUTHTOKEN.
1.1. Обработчик подключений
Создает слушатель порта для ws.domain.ru
При входящем клиентском подключении, в отдельном потоке будет запущен обработчик входящего подключения.
Обработчик подключения, ожидает поступления данных из очереди входящего потока finnhub, в случае наличия данных для клиента - отправляет их в браузер.
Обработчик подключения, ожидает поступления данных из браузера клиента. Реализует функции исполнения команд: подписка, отписка, завершение сеанса, авторизация.
1.2. Авторизация
При первом подключении клиента из браузера, в менеджер управления подписками - отправляется запрос авторизации. Если логин\пароль присутствуют в базе данных, то в ответ МУП отдаст уникальный XAUTHTOKEN. TTL 15 минут.
2. Реализация канала между клиентом finnhub и менеджером управления подписками.
На стороне сервера, открывается соединение с wss://ws.finnhub.io
Производится подписка на нужные пары данных, список необходимых для подписки пар, находится в таблице менеджера управления подписками.
Менеджер управления подписками - будет реализован в виде дочернего процесса в системе. Главный процесс - будет осуществлять: прослушивание данных от finnhub сервера и реализацию очередей к менеджеру управления подписками.
Скринер акций, Котировки
Пользователи, События, Параметры визита