Skip to content

ErrorBoi/http-router-test-task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Test task

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

http-router-test-task

About

Test task completed for AdTech I don't remember already

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published