Примеры

Примеры использования hyper

Эти примеры показывают, как выполнять распространенные задачи с помощью hyper. Вам также могут быть полезны Руководства.

Если вы склонируете этот репозиторий, вы можете запустить любой из примеров командой:

cargo run --example {example_name} --features="full"

Зависимости

Полный список зависимостей, используемых в этих примерах:

[dependencies]
hyper = { version = "1", features = ["full"] }
tokio = { version = "1", features = ["full"] }
pretty_env_logger = "0.5"
http-body-util = "0.1"
bytes = "1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
form_urlencoded = "1"
http = "1"
futures-util = { version = "0.3", default-features = false }

Начало работы

Клиенты

  • client - Простой CLI HTTP-клиент, который запрашивает URL, переданный в параметрах, и выводит содержимое и детали ответа в stdout, читая содержимое по частям (chunk-by-chunk).

  • client_json - Простая программа, которая GET-запросом получает JSON, читает тело асинхронно, парсит его с помощью serde и выводит результат.

Серверы

  • hello - Простой сервер, который возвращает "Hello World!".

  • echo - Эхо-сервер, который копирует содержимое POST-запроса в содержимое ответа.

Более сложные примеры

  • gateway - Серверный шлюз (обратный прокси), который проксирует запросы к сервису hello, описанному выше.

  • graceful_shutdown - Сервер, который имеет таймаут для входящих соединений и выполняет грациозное завершение соединений.

  • http_proxy - Простой HTTP(S) прокси, который обрабатывает и апгрейдит CONNECT запросы, а затем проксирует данные между клиентом и удаленным сервером.

  • multi_server - Сервер, который прослушивает два разных порта, с разными Service для каждого порта.

  • params - Веб-сервер, который принимает форму с именем и числом, проверяет наличие параметров и валидирует ввод.

  • send_file - Сервер, который отправляет содержимое файлов обратно, используя tokio-util для асинхронного чтения файлов.

  • service_struct_impl - Структура, которая вручную реализует трейт Service и использует общий счетчик между запросами.

  • single_threaded - Сервер, работающий только в 1 потоке, что позволяет использовать состояние приложения !Send (например, счетчик Rc).

  • state - Веб-сервер, демонстрирующий базовое разделение состояния между запросами. Счетчик является общим, увеличивается при каждом запросе, и каждый ответ содержит последнее значение счетчика.

  • upgrades - Сервер и клиент, демонстрирующие как выполнять HTTP апгрейды (такие как WebSockets).

  • web_api - Сервер, состоящий из сервиса, который возвращает содержимое входящего POST-запроса в ответе в верхнем регистре, и сервиса, который вызывает первый сервис и включает ответ первого сервиса в свой собственный ответ.