Dowiedz się, jak zbudować niestandardowy serwer WWW HTTP przy użyciu pakietu Actix lub Rocket firmy Rust.
HTTP wykorzystuje architekturę klient-serwer do przesyłania informacji i danych. Jedną z cech języków programowania po stronie serwera, takich jak Rust, jest tworzenie aplikacji serwerowych i klienckich do interakcji z usługami opartymi na protokole HTTP.
Rust nadaje się do budowy serwerów HTTP dzięki funkcjom bezpieczeństwa, wydajności i niezawodności. Skrzynki innych firm Rust, takie jak Actix i Rocket, są popularne do budowy zaawansowanych serwerów WWW, które mogą obsłużyć duży ruch.
Dlaczego warto używać Rust do tworzenia serwerów WWW HTTP?
Rust zyskał popularność w programowaniu serwerów WWW, ponieważ niektóre funkcje tego języka są dokładnie wymagane do budowy większości serwerów WWW.
Korzystanie z Rust zapewnia wydajne skalowanie aplikacji, dzięki czemu język ten jest idealny do tworzenia aplikacji o wysokiej wydajności. Oto konkretne powody, dla których warto rozważyć użycie Rust na serwerze WWW i innych aplikacjach po stronie serwera.
Wysoka wydajność Rusta
Wysoka wydajność jest jednym z powodów, dla których Rust jest doskonałym wyborem do budowy serwerów WWW HTTP. Rust zapewnia niski poziom dostępu do zasobów systemowych, w tym pamięci i procesora, umożliwiając pisanie kodu, który działa szybciej przy mniejszej ilości zasobów niż inne języki po stronie serwera.
Dodatkowo, system własności Rusta eliminuje potrzebę wyrzucania elementów bezużytecznych w czasie kompilacji, co jest jednym z powodów, dla których niektóre języki po stronie serwera działają wolno.
Bezpieczeństwo i ochrona
Własny system zarządzania pamięcią Rust sprawia, że język jest bezpieczny dla rozwoju serwerów WWW. Nie występują puste lub zawieszone odwołania do wskaźników, które mogą prowadzić do wycieków pamięci i innych luk w zabezpieczeniach.
System własności Rusta zapobiega tym typowym błędom, aby zapewnić bezpieczeństwo serwera i aplikacji. Rust koncentruje się również na zapobieganiu przepełnieniom bufora i innym błędom związanym z pamięcią.
Konkurencja
Współbieżność to zdolność do uruchamiania wielu jednostek programu w sposób poza kolejnością bez wpływu na wynik. Dane wyjściowe programu współbieżnego powinny być takie same, jak dane wyjściowe programu asynchronicznego.
Współbieżność może znacząco wpłynąć na wydajność aplikacji, ponieważ serwery muszą obsługiwać wiele żądań jednocześnie. Rust zapewnia wsparcie dla współistnienia z lekkim modelem wątków.
Sos programowania współbieżnego w Rust polega na tym, że system własności pozwala pisać kod bezpieczny dla wątków bez potrzeby stosowania blokad i innych prymitywów synchronizacji.
Biblioteka standardowa Rusta i pakiety stron trzecich w ekosystemie Rust zapewnić nowoczesne narzędzia do skutecznego rozwój serwera WWW.
Cargo, menedżer pakietów Rusta, upraszcza zarządzanie zależnościami i buduje procesy. Ponadto Rust ma doskonałą obsługę IDE z narzędziami takimi jak Rust Analyzer, które zapewniają bezproblemowe uzupełnianie kodu, podświetlanie błędów i inne funkcje.
Przegląd bibliotek Actix i Rocket
Standardowa biblioteka Rust zawiera większość narzędzi potrzebnych do budowy serwerów WWW. Biblioteki stron trzecich, takie jak Rakieta I Aktix uprościć tworzenie aplikacji po stronie serwera za pomocą Rust.
Aktix I Rakieta są popularnymi frameworkami internetowymi Rust, ale biblioteki różnią się wyglądem i funkcjami.
Rocket to platforma internetowa wysokiego poziomu, dla której priorytetem jest produktywność i łatwość użytkowania. Rocket zapewnia wiele abstrakcji i cukru składniowego do tworzenia aplikacji internetowych w Rust. Rocket jest również popularny ze względu na mocne pisanie i intuicyjny interfejs API.
Możesz dodać Rocket jako zależność projektu w swoim Cargo.toml plik, aby rozpocząć tworzenie aplikacji internetowych w Rust:
[zależności]
rakieta = "0.4.11"
Z drugiej strony Actix-web to platforma niskiego poziomu, w której priorytetem jest wydajność i skalowalność. Actix wykorzystuje model współbieżności oparty na aktorach i zapewnia nieblokujące wejścia/wyjścia, co czyni pakiet idealnym do tworzenia wydajnych aplikacji internetowych.
Dodaj Actix jako zależność projektu w zależności sekcja twojego Cargo.toml plik:
[zależności]
actix-web = "4.3.1"
Wybór biblioteki dla twojego projektu będzie zależał od specyfikacji twojego projektu, funkcji biblioteki oraz twojego doświadczenia z Rust i HTTP.
Budowanie prostego serwera WWW w Rust
Po utworzeniu projektu Rust i dodaniu dowolnego frameworka Rocket lub Actix do zależności twojego projektu w Cargo.toml plik, jesteś gotowy do rozpoczęcia budowy serwera WWW w Rust.
Budowanie prostego serwera WWW za pomocą Actix
Możesz użyć serializatora do żądań podczas budowania usług sieciowych w Rust.
Serde to popularna biblioteka Rust do serializacji i deserializacji danych między typami Rusta i formatami danych, takimi jak JSON, YAML i TOML. Serde zapewnia ramy do definiowania konwersji danych między strukturami danych Rusta i odpowiadającymi im reprezentacjami w innych formatach danych.
Oto dyrektywa dotycząca dodawania Serde jako pakietu innej firmy do twojego projektu.
[zależności]
serdeczny = { wersja = "1.0.159", funkcje = ["czerpać"] }
Po dodaniu Serde i Actix jako zależności projektu, możesz odrodzić podstawowy serwer WWW z Rust. Oto jak możesz skonfigurować plik simple Witaj świecie! serwer WWW, który zapisuje ciąg znaków do klienta za pomocą Actix:
Najpierw zaimportuj niezbędne moduły i typy z pliku actix_web I serdeczny skrzynie:
używać actix_web::{get, web, App, HttpResponse, HttpServer, Responder};
używać serde::{Dserializacja, Serializacja};
użyjesz serdeczny serializować wiadomość do klienta za pomocą struktury. Serde przekonwertuje strukturę na JSON dla klienta. Oto struktura wiadomości:
#[pochodne (debugowanie, serializacja, deserializacja)]
strukturaWiadomość {
wiadomość: Strunowy,
}
Możesz teraz zdefiniować funkcję obsługi dla punktu końcowego. Na górze funkcji obsługi możesz dodać dekoratory dla niestandardowych zachowań:
#[Dostawać("/")]
asynchronicznyprzypWitam() -> implik odpowiadający {
HttpOdpowiedź::OK().json (Wiadomość {
wiadomość: "Witaj świecie!".to_owned(),
})
}
The Witam funkcja obsługi obsługuje żądania GET. Funkcja zwraca typ, który implementuje Odpowiadający cecha z Aktix pakiet.
The json metoda tzw HttpResponse:: Ok() type przyjmuje instancję struktury, która Serde obsługuje pod maską i zwraca odpowiedź do klienta.
Po zdefiniowaniu punktu końcowego można uruchomić instancję serwera i zamontować punkt końcowy na trasie.
#[actix_web:: główny]
asynchronicznyprzypgłówny() -> std:: io::Wynik {
HttpServer:: new(|| App:: new().service (witaj))
.wiązać("127.0.0.1:8080")?
.uruchomić()
.czekać na
}
The HttpServer:: nowy funkcja jest nową instancją serwera. The główny funkcja zostaje uruchomiona, a serwer montuje plik Witam handler z nową instancją aplikacji. The wiązać Metoda wiąże serwer z określonym adresem URL, a metoda uruchomić funkcja uruchamia serwer.
Budowanie prostego serwera WWW za pomocą Rocket
Rocket jest minimalistyczny, więc możesz skonfigurować prosty serwer WWW bez żadnych zależności innych niż Rakieta skrzynia.
Oto jak skonfigurować prosty serwer z plikiem Witaj świecie! punkt końcowy za pomocą rakiety:
Najpierw zaimportuj niezbędne zależności dla swojego serwera.
#![funkcja (proc_macro_hygiene, decl_macro)]
#[macro_use]
zewnętrznyskrzynia rakieta;
// import ze skrzynki Rocket
używać rakieta:: odpowiedź:: treść;
używać rakieta:: Stan;
The #![funkcja (proc_macro_hygiene, decl_macro)] atrybut włącza eksperymentalne funkcje Rust dla środowiska Rocket. The #[macro_use] atrybut importuje makra z pliku rakieta moduł.
Oto funkcja obsługi, która obsługuje kod HTML na żądanie:
#[Dostawać("/")]
przypWitaj świecie() -> zawartość:: Html'statycznyul> {
treść:: Html("Witaj świecie!
")
}
The Witaj świecie funkcja zwraca statyczny ciąg HTML z rozszerzeniem treść:: HTML funkcjonować.
Oto deklaracja struktury konfiguracyjnej dla serwera (konwencja frameworka Rocket):
strukturaKonfig {
Port: u16,
}
#[Dostawać("/Port")]
przypPort(konfiguracja: Stan) -> Strunowy {
format!(„Serwer działający na porcie {}”, port konfiguracji)
}
Po uruchomieniu serwera możesz wysyłać żądania do /port punkt końcowy dla stanu portu.
Na koniec utworzysz instancję serwera z rozszerzeniem zapalać funkcjonować. Dodaj konfiguracje, zamontuj trasy i uruchom serwer:
przypgłówny() {
pozwalać konfiguracja = konfiguracja { port: 8000 };
rakieta:: zapal()
.manage (konfiguracja)
.uchwyt("/", trasy![hello_world, port])
.początek();
}
The konfiguracja zmienna jest instancją Konfig struktura. The zapalać funkcja uruchamia instancję serwera, plik zarządzać metoda dodaje konfigurację do serwera, a uchwyt Metoda montuje funkcję obsługi na trasach podstawowych. Wreszcie, początek Metoda uruchamia serwer do nasłuchiwania na określonym porcie.
Możesz tworzyć potężne aplikacje internetowe w Rust z WASM
WebAssembly (WASM) to binarny format instrukcji przeznaczony do wykonywania w przeglądarkach i innych urządzeniach. WASM zapewnia format kodu bajtowego niskiego poziomu, którego języki programowania wyższego poziomu, takie jak Rust, mogą używać jako celu kompilacji.
Dzięki WASM możesz skompilować swój kod Rust do formatu binarnego, który może wykonać większość popularnych przeglądarek. WASM otwiera świat możliwości tworzenia solidnych aplikacji internetowych w Rust, w tym pełnych aplikacji internetowych.