Узнайте, как создать собственный веб-сервер HTTP с помощью пакета Actix или Rocket от Rust.

HTTP использует архитектуру клиент-сервер для передачи информации и данных. Одной из особенностей серверных языков программирования, таких как Rust, является разработка серверов и клиентских приложений для взаимодействия с сервисами на основе HTTP.

Rust подходит для создания HTTP-серверов благодаря своим характеристикам безопасности, производительности и надежности. Сторонние ящики Rust, такие как Actix и Rocket, популярны для создания сложных веб-серверов, которые могут обрабатывать высокий трафик.

Почему вы должны использовать Rust для разработки веб-сервера HTTP?

Rust приобрел популярность для разработки веб-серверов, поскольку некоторые функции языка точно соответствуют требованиям для создания большинства веб-серверов.

Использование Rust обеспечивает эффективное масштабирование вашего приложения, что делает язык идеальным для создания высокопроизводительных приложений. Вот конкретные причины, по которым стоит рассмотреть возможность использования Rust для вашего веб-сервера и других серверных приложений.

instagram viewer

Высокая производительность Rust

Высокая производительность — одна из причин, по которой Rust является отличным выбором для создания веб-серверов HTTP. Rust обеспечивает низкоуровневый доступ к системным ресурсам, включая память и ЦП, что позволяет вам писать код, который работает быстрее с меньшими ресурсами, чем другие серверные языки.

Кроме того, система владения Rust устраняет необходимость в сборке мусора во время компиляции, что является одной из причин медленной работы некоторых серверных языков.

Безопасность и охрана

Собственная система управления памятью Rust делает язык безопасным для разработки веб-серверов. Вы не сталкиваетесь с нулевыми или оборванными ссылками на указатели, которые могут привести к утечке памяти и другим уязвимостям безопасности.

Система владения Rust предотвращает эти распространенные ошибки, чтобы обеспечить безопасность вашего сервера и приложений. Rust также фокусируется на предотвращении переполнения буфера и других ошибок, связанных с памятью.

параллелизм

Параллелизм — это возможность запускать несколько модулей программы не по порядку, не влияя на результат. Вывод параллельной программы должен быть таким же, как вывод асинхронной программы.

Параллелизм может значительно повлиять на производительность вашего приложения, поскольку серверам необходимо одновременно обрабатывать несколько запросов. Rust поддерживает сосуществование с упрощенной моделью потоков.

Суть параллельного программирования в Rust заключается в том, что система владения позволяет вам писать потокобезопасный код без необходимости блокировок и других примитивов синхронизации.

Стандартная библиотека Rust и сторонние пакеты в экосистеме Rust предоставить современный инструментарий для эффективного разработка веб-сервера.

Cargo, менеджер пакетов Rust, упрощает управление зависимостями и создает процессы. Кроме того, Rust имеет отличную поддержку IDE с такими инструментами, как Rust Analyzer, которые обеспечивают плавное завершение кода, выделение ошибок и другие функции.

Обзор библиотек Actix и Rocket

В стандартной библиотеке Rust есть большинство утилит, которые вам понадобятся для создания веб-серверов. Сторонние библиотеки, такие как Ракета и Актикс упростить создание серверных приложений с помощью Rust.

Актикс и Ракета являются популярными веб-фреймворками Rust, но библиотеки различаются по дизайну и возможностям.

Rocket — это веб-фреймворк высокого уровня, в котором приоритет отдается производительности и простоте использования. Rocket предоставляет множество абстракций и синтаксического сахара для создания веб-приложений на Rust. Rocket также популярен благодаря строгой типизации и интуитивно понятному дизайну API.

Вы можете добавить Rocket в качестве зависимости проекта в свой Груз.томл файл, чтобы начать создавать веб-приложения на Rust:

[зависимости]
ракета = "0.4.11"

С другой стороны, Actix-web — это низкоуровневая структура, в которой приоритет отдается производительности и масштабируемости. Actix использует модель параллелизма на основе акторов и обеспечивает неблокирующий ввод-вывод, что делает пакет идеальным для создания высокопроизводительных веб-приложений.

Добавьте Actix в качестве зависимости проекта в зависимости раздел вашего Груз.томл файл:

[зависимости]
актикс-веб = "4.3.1"

Выбор библиотеки для вашего проекта будет зависеть от спецификаций вашего проекта, особенностей библиотеки и вашего опыта работы с Rust и HTTP.

Создание простого веб-сервера на Rust

После создания проекта Rust и добавления любого из фреймворков Rocket или Actix к зависимостям вашего проекта в Груз.томл файл, вы готовы приступить к созданию веб-сервера на Rust.

Создание простого веб-сервера с помощью Actix

Вы можете использовать сериализатор для запросов при создании веб-сервисов в Rust.

Serde — популярная библиотека Rust для сериализации и десериализации данных между типами Rust и форматами данных, такими как JSON, YAML и TOML. Serde предоставляет платформу для определения преобразования данных между структурами данных Rust и соответствующими представлениями в других форматах данных.

Вот директива для добавления Serde в качестве стороннего пакета для вашего проекта.

[зависимости]
серде = {версия = "1.0.159", функции = ["извлекать"] }

После того, как вы добавили Serde и Actix в качестве зависимостей проекта, вы можете создать базовый веб-сервер с помощью Rust. Вот как можно настроить простой Привет, мир! веб-сервер, который записывает строку клиенту с Actix:

Сначала импортируйте необходимые модули и типы из actix_web и серде ящики:

использовать actix_web::{get, web, App, HttpResponse, HttpServer, Responder};
использовать serde::{Десериализовать, Сериализировать};

Вы будете использовать серде для сериализации сообщения клиенту со структурой. Serde преобразует структуру в JSON для клиента. Вот структура сообщения:

#[получение (отладка, сериализация, десериализация)]
структураСообщение {
сообщение: Нить,
}

Теперь вы можете определить функцию обработчика для конечной точки. В верхней части функции обработчика вы можете добавить декораторы для настраиваемого поведения:

#[получать("/")]
асинхронныйфнпривет() -> импл Ответчик {
HTTP-ответ::Хорошо().json (Сообщение {
сообщение: "Привет, мир!".to_own(),
})
}

привет Функция-обработчик обрабатывает запросы GET. Функция возвращает тип, реализующий Ответчик черта из Актикс упаковка.

json метод HttpResponse:: Хорошо() type принимает экземпляр структуры, который Серде обрабатывает под капотом и возвращает ответ клиенту.

После определения конечной точки вы можете запустить экземпляр сервера и смонтировать конечную точку на маршруте.

#[actix_web:: main]
асинхронныйфносновной() -> стд:: ио::Результат {
HttpServer:: new(|| App:: new().service (привет))
.связывать("127.0.0.1:8080")?
.бегать()
.Ждите
}

HttpServer:: новый function — это новый экземпляр сервера. основной функция запускается, и сервер монтирует привет обработчик с новым экземпляром приложения. связывать метод привязывает сервер к указанному URL, а метод бегать функция запускает сервер.

Создание простого веб-сервера с помощью Rocket

Rocket минималистичный, поэтому вы можете настроить простой веб-сервер без каких-либо зависимостей, кроме Ракета ящик.

Вот как настроить простой сервер с Привет, мир! конечная точка с использованием Rocket:

Сначала импортируйте необходимые зависимости для вашего сервера.

#![функция (proc_macro_hygiene, decl_macro)]

#[использование_макро]
внешнийящик ракета;

// импорт из ящика Rocket
использовать ракета:: ответ:: контент;
использовать ракета:: государство;

#![функция (proc_macro_hygiene, decl_macro)] Атрибут включает экспериментальные функции Rust для фреймворка Rocket. #[использование_макро] атрибут импортирует макросы из ракета модуль.

Вот функция-обработчик, которая обслуживает HTML по запросу:

#[получать("/")]
фнПривет, мир() -> содержимое:: Htmlстатическийул> {
содержание:: Html("

Привет, мир!

"
)
}

Привет, мир функция возвращает статическую строку HTML с содержание:: HTML функция.

Вот объявление структуры конфигурации для сервера (соглашение Rocket framework):

структураКонфигурация {
порт: U16,
}

#[получать("/ порт")]
фнпорт(конфигурация: состояние) -> Нить {
формат!("Сервер работает на порту {}", конфиг.порт)
}

Когда вы запускаете сервер, вы можете делать запросы к /port конечная точка для состояния порта.

Наконец, вы создадите экземпляр сервера с зажечь функция. Добавьте конфигурации, смонтируйте маршруты и запустите сервер:

фносновной() {
позволять конфиг = конфиг { порт: 8000 };

ракета:: зажечь()
.manage (конфигурация)
.устанавливать("/", маршруты![hello_world, порт])
.запуск();
}

конфигурация переменная является экземпляром Конфигурация структура. зажечь функция запускает экземпляр сервера, управлять метод добавляет конфигурацию на сервер, а устанавливать метод монтирует функцию-обработчик на базовые маршруты. Наконец, запуск Метод запускает сервер для прослушивания указанного порта.

Вы можете создавать мощные веб-приложения на Rust с помощью WASM

WebAssembly (WASM) — это двоичный формат инструкций, предназначенный для выполнения в браузерах и других устройствах. WASM предоставляет низкоуровневый формат байт-кода, который языки программирования более высокого уровня, такие как Rust, могут использовать в качестве цели компиляции.

С помощью WASM вы можете скомпилировать свой код Rust в двоичный формат, который могут выполнять самые популярные браузеры. WASM открывает мир возможностей для создания надежных веб-приложений на Rust, в том числе полнофункциональных веб-приложений.