Code Monkey home page Code Monkey logo

http-router-test-task's Introduction

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

http-router-test-task's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.