В архиве находится несколько 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 получил ответ с максимальной ставкой.