Примеры
Примеры использования 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-запроса в ответе в верхнем регистре, и сервиса, который вызывает первый сервис и включает ответ первого сервиса в свой собственный ответ.