Это программа - эмулятор программно-аппаратной системы, который содержит эмулятор устройств, эмулятор серверов и маршрутизирующий прокси-сервер.
Программа запускает 3 контейнера, в первом - эмуляция устройств(3 устройства), которые отправляют запросы на второй контейнер, в котором запущен proxy-сервер, он перенаправляет запросы в третий контейнер, маршрутизируя запросы на определенные серверы(по id устройства), на котором запущены 3 сервера, принимающие запросы от устройств. После принятия запроса от proxy, сервер возвращает ответ, который proxy возвращает в устройство. Причем, контейнер устройств и proxy находятся в одной виртуальной сети, а proxy и контейнер серверов в другой. Благодаря чему имитируется что запросы, проходят не только от одного контейнера к другому, но и проходят из одной виртуальной сети в другую.
Python 3.12, Docker, Tornado
$ cd /path/to/servem
$ docker-compose up
$ python proxy.py --settings=config.toml -p 7777
- Где в:
- --settings, указывается путь до файла настроек
- -ht или --host, указывается хост proxy-сервера
- -p или --port, указываются порт proxy-сервера
В команде выше, запустится сервер на порту 7777, который будет маршрутизировать запросы по схеме, настраиваемой в параметре PROXY_MAP, в config.toml
$ python server.py --settings=config.toml -sp 8080 -plp 8090 -pp 9000
- Где в:
- --settings, путь до файла настроек
- -sp или --staging_port, порт сервера для разработки
- -plp или --production_like_port, порт сервера для регрессионного тестирования
- -pp или --production_port, порт продакшен-сервера
В команде выше, запустятся 3 локальных сервера(с приложениями для приема статусов запросов) на портах 8080, 8090 и 9000 и сервер по-умолчанию, который настраивается в config.toml
$ python client.py --settings=config.toml -d terminal_0 terminal_5 terminal_25 -ht proxy -p 7777
- Где в:
- --settings, путь до файла настроек
- -d или --devices_id, id устройств (ID устройства должно содержать _ и после этого символа должен быть номер устройства)
- -ht или --host, сервер, на который устройства передают свой статус, в данном случае proxy - обращение по имени контейнера
- -p или --port, порт, на который устройства передают свой статус
В команде выше, запустятся 3 устройства с id terminal_0, terminal_5, terminal_25. После запуска, устройства начнут периодическую отправку своего статуса на сервер proxy-сервер на порту 7777
-
Эмуляторы устройств:
-
После запуска, периодически отправляют свой статус на сервер через proxy: POST /status/
{ "device_id": "<идентификатор устройства, string>", "request_id": "<идентификатор запроса, string>", "status": "OK", "data": { <произвольный объект с данными> } }
-
Идентификаторы устройств, ip-адрес и порт сервера задаются через аргументы командной строки.
-
-
Прокси-сервер, маршрутизирует запросы между эмуляторами сервера, в зависимости от идентификатора устройства в теле запроса и делает это по таблице соответствия описываемой в config.toml
-
Эмулятор сервера:
-
Отвечает на все корректные по структуре запросы следующим json:
{ "device_id": "<идентификатор устройства, string>", "request_id": "<идентификатор запроса, string>", "result": "OK" }
-