Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/harzu/httpmultiplexor
https://github.com/harzu/httpmultiplexor
Last synced: 22 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/harzu/httpmultiplexor
- Owner: Harzu
- Created: 2021-01-18T05:47:35.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-08-31T11:36:44.000Z (over 3 years ago)
- Last Synced: 2024-10-25T10:50:20.354Z (2 months ago)
- Language: Go
- Size: 12.7 KB
- Stars: 4
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
### Тестовое задание HTTP-мультиплексор:
- приложение представляет собой http-сервер с одним хендлером
- хендлер на вход получает POST-запрос со списком url в json-формате
- сервер запрашивает данные по всем этим url и возвращает результат клиенту в json-формате
- если в процессе обработки хотя бы одного из url получена ошибка, обработка всего списка прекращается и клиенту возвращается текстовая ошибка#### Ограничения:
- для реализации задачи следует использовать Go 1.13 или выше
- использовать можно только компоненты стандартной библиотеки Go
- сервер не принимает запрос если количество url в в нем больше 20
- сервер не обслуживает больше чем 100 одновременных входящих http-запросов
- для каждого входящего запроса должно быть не больше 4 одновременных исходящих
- таймаут на запрос одного url - секунда
- обработка запроса может быть отменена клиентом в любой момент, это должно повлечь за собой остановку всех операций связанных с этим запросом
- сервис должен поддерживать 'graceful shutdown'
- результат должен быть выложен на github#### Запуск
```bash
# Сборка контейнера
make build
# Запуск
docker-compose up -d
```- Все параметры указанны в [docker compose файле](./docker-compose.yml)
- Для стресс теста использовалась [vegeta](https://github.com/tsenart/vegeta)```bash
# Запуск vegeta теста
make rate_limit_test_success
make rate_limit_test_exceed_limit
```#### API
**/pages**Content-Type: **application/json**
Body example
```json
["http://localhost:8080"]
```