В архиве находится несколько go приложений, которые общаются друг с другом посредством http post запросов. В теле каждого запроса/ответа находится JSON текст. Краткое описание каждого приложения:
client
- генерирует поток N запросов трёх типов (RequestV1
,RequestV2
,RequestV3
- см код message.go), отправляет их в приложениеproxy
и пишет ответ в лог.proxy
- получает от клиента запрос одного из трёх типов, преобразует его в запрос типаInnerRequest
, асинхронно отправляет этот запрос каждому экземпляру приложенияrecipient
. При получении ответов отrecipient
-ов определяется ответ с максимальной ставкой и этот ответ отправляется приложениюclient
. Т.е. это приложение организцет аукцион междуrecipient
-ами.recipient
- получает от proxy запрос типаInnerRequest
, генерирует случайный ответ и отвечает им.
В корневой папке есть bash-скрипт start.sh. Используй его для запуска системы. Каждое из трёх приложений пишет в папку log все запросы/ответы и промежуточные данные. Сейчас в этой папке есть результаты работы системы для 1000 запросов клиента. Можешь использовать их для ознакомления/сравнения.
Код приложения proxy
удалён. Твоя задача восстановить его, чтобы система стала работоспособной. Допускается использование любых go пакетов какие будут удобны.
Требования подробно к приложению proxy:
- через аргумент командной строки
-p
получает порт для работы (в start.sh используется порт8050
, но ты можешь задать любой другой) - через аргумент командной строки
-r
получает список портов приложенийrecipient
, разделённых запятыми (в start.sh это8051,8052,8053
). Нужно разбить эту строку на отдельные порты и преобразовать полученный список портов в список адресов по шаблону:<port> -> http://localhost:<port>/bid
(например 8051 в http://localhost:8050/bid). - приложение способно принять в теле http post запроса любой из трёх типов внешних запросов (
RequestV1/2/3
) в виде JSON строки, распарсить их и на основе распарсенного запроса создать запрос типаInnerRequest
. - основываясь на списке адресов
recipient
-ов (см. п. 2) организовать аукцион междуrecipient
-ами: - асинхронно отправить
InnerRequest
каждому из них - получить ответ, распарсить его в
InnerResponse
объект - определить ответ с максимальной ставкой и отдать этот ответ приложению
client
.
Писать лог необязательно в том же виде, как в примере. Твоя задача состоит в том, чтобы client
получил ответ с максимальной ставкой.