Naučte se, jak vytvořit vlastní HTTP webový server pomocí balíčku Rust's Actix nebo Rocket.

HTTP využívá pro přenos informací a dat architekturu klient-server. Jednou z funkcí programovacích jazyků na straně serveru, jako je Rust, je vývoj serverů a klientských aplikací pro interakci se službami založenými na HTTP.

Rust je vhodný pro stavbu HTTP serverů díky svým bezpečnostním, výkonnostním a spolehlivým vlastnostem. Přepravky od Rust jako Actix a Rocket jsou oblíbené pro budování sofistikovaných webových serverů, které zvládnou vysoký provoz.

Proč byste měli používat Rust pro vývoj webového serveru HTTP?

Rust si získal popularitu pro vývoj webových serverů, protože některé funkce jazyka jsou přesně požadavky na stavbu většiny webových serverů.

Použití Rust zajišťuje efektivní škálování vaší aplikace, takže jazyk je ideální pro vytváření vysoce výkonných aplikací. Zde jsou konkrétní důvody, proč zvážit použití Rust pro váš webový server a další aplikace na straně serveru.

Vysoký výkon Rustu

instagram viewer

Vysoký výkon je jedním z důvodů, proč je Rust vynikající volbou pro vytváření webových serverů HTTP. Rust poskytuje nízkoúrovňový přístup k systémovým prostředkům, včetně paměti a CPU, což vám umožňuje psát kód, který běží rychleji s menším množstvím prostředků než jiné jazyky na straně serveru.

Systém vlastnictví Rustu navíc eliminuje potřebu shromažďování odpadků v době kompilace, což je jeden z důvodů, proč jsou některé jazyky na straně serveru pomalé.

Bezpečnost a zabezpečení

Vlastnický systém správy paměti společnosti Rust činí jazyk bezpečným pro vývoj webových serverů. Nezaznamenáváte nulové nebo visící odkazy na ukazatele, které mohou vést k únikům paměti a dalším chybám zabezpečení.

Rustův vlastnický systém zabrání těmto běžným chybám, aby byl váš server a aplikace v bezpečí. Rust se také zaměřuje na prevenci přetečení vyrovnávací paměti a dalších chyb souvisejících s pamětí.

Konkurence

Souběžnost je schopnost spouštět více jednotek programu způsobem mimo pořadí bez ovlivnění výstupu. Výstup souběžného programu by měl být stejný jako výstup asynchronního programu.

Souběžnost může výrazně ovlivnit výkon vaší aplikace, protože servery musí zpracovávat více požadavků současně. Rust poskytuje podporu pro koexistenci s lehkým modelem závitování.

Omáčka souběžného programování v Rustu spočívá v tom, že systém vlastnictví vám umožňuje psát kód bezpečný pro vlákna bez potřeby zámků a dalších synchronizačních primitiv.

Standardní knihovna Rust a balíčky třetích stran v ekosystému Rust poskytnout moderní nástroje pro efektivní vývoj webových serverů.

Cargo, správce balíčků Rust, zjednodušuje správu závislostí a buduje procesy. Kromě toho má Rust vynikající podporu IDE s nástroji jako Rust Analyzer, které poskytují bezproblémové dokončování kódu, zvýraznění chyb a další funkce.

Přehled knihoven Actix a Rocket

Rust's Standard Library má většinu nástrojů, které budete potřebovat k sestavení webových serverů. Knihovny třetích stran jako Raketa a Actix zjednodušit vytváření aplikací na straně serveru pomocí Rust.

Actix a Raketa jsou populární webové rámce Rust, ale knihovny se liší designem a funkcemi.

Rocket je webový rámec na vysoké úrovni, který upřednostňuje produktivitu a snadné použití. Rocket poskytuje spoustu abstrakcí a syntaxe cukru pro vytváření webových aplikací v Rustu. Rocket je také populární pro své silné psaní a intuitivní design API.

Rocket můžete přidat jako závislost projektu ve vašem Cargo.toml soubor, abyste mohli začít vytvářet webové aplikace v Rustu:

[závislosti]
raketa = "0.4.11"

Na druhou stranu je Actix-web nízkoúrovňový rámec upřednostňující výkon a škálovatelnost. Actix využívá model souběžnosti založený na aktérech a poskytuje neblokující I/O, díky čemuž je balíček ideální pro vytváření výkonných webových aplikací.

Přidejte Actix jako závislost projektu v závislosti část vašeho Cargo.toml soubor:

[závislosti]
actix-web = "4.3.1"

Výběr knihovny pro váš projekt bude záviset na specifikacích vašeho projektu, funkcích knihovny a vašich zkušenostech s Rust a HTTP.

Vytvoření jednoduchého webového serveru v Rustu

Po vytvoření projektu Rust a přidání libovolného rámce Rocket nebo Actix do závislostí vašeho projektu v Cargo.toml soubor, jste připraveni začít budovat webový server v Rust.

Vytvoření jednoduchého webového serveru s Actixem

Při vytváření webových služeb v Rustu můžete pro požadavky použít serializátor.

Serde je populární knihovna Rust pro serializaci a deserializaci dat mezi typy Rust a datovými formáty jako JSON, YAML a TOML. Serde poskytuje rámec pro definování převodu dat mezi datovými strukturami Rust a odpovídajícími reprezentacemi v jiných datových formátech.

Zde je směrnice pro přidání Serde jako balíčku třetí strany pro váš projekt.

[závislosti]
Serde = { verze = "1.0.159", vlastnosti = ["odvodit"] }

Jakmile přidáte Serde a Actix jako závislosti projektu, můžete vytvořit základní webový server s Rustem. Zde je návod, jak můžete jednoduše nastavit Ahoj světe! webový server, který zapíše řetězec klientovi pomocí Actix:

Nejprve importujte potřebné moduly a typy z actix_web a Serde přepravky:

použití actix_web::{get, web, aplikace, HttpResponse, HttpServer, Responder};
použití serde::{Deserializovat, Serializovat};

budete používat Serde k serializaci zprávy klientovi se strukturou. Serde převede strukturu na JSON pro klienta. Zde je struktura zprávy:

#[derive (debug, serialize, deserialize)]
strukturovatZpráva {
zpráva: Tětiva,
}

Nyní můžete definovat funkci handleru pro koncový bod. V horní části funkce manipulátoru můžete přidat dekorátory pro vlastní chování:

#[dostat("/")]
asynchronnífnAhoj() -> impl Responder {
HttpResponse::OK().json (zpráva {
zpráva: "Ahoj světe!".to_owned(),
})
}

The Ahoj funkce handler zpracovává požadavky GET. Funkce vrací typ, který implementuje Odpovídač vlastnost z Actix balík.

The json metoda HttpResponse:: Ok() typ přebírá instanci struktury, která Serde zpracovává pod pokličkou a vrací odpověď klientovi.

Po definování koncového bodu můžete spustit instanci serveru a připojit koncový bod na trasu.

#[actix_web:: main]
asynchronnífnhlavní() -> std:: io::Výsledek {
HttpServer:: new(|| App:: new().service (ahoj))
.svázat("127.0.0.1:8080")?
.běh()
.čekat
}

The HttpServer:: nový funkce je nová instance serveru. The hlavní spustí se funkce a server připojí Ahoj funkce handleru s novou instancí aplikace. The svázat metoda váže server k zadané adrese URL a běh funkce spouští server.

Vytvoření jednoduchého webového serveru s raketou

Rocket je minimalistický, takže si můžete nastavit jednoduchý webový server bez jakýchkoli jiných závislostí Raketa bedna.

Zde je návod, jak nastavit jednoduchý server s a Ahoj světe! koncový bod pomocí Rocket:

Nejprve naimportujte potřebné závislosti pro váš server.

#![funkce (proc_macro_hygiene, decl_macro)]

#[makro_použití]
externíbedna raketa;

// import z bedny Rocket
použití raketa:: reakce:: obsah;
použití raketa:: Stát;

The #![funkce (proc_macro_hygiene, decl_macro)] atribut povoluje experimentální funkce Rust pro framework Rocket. The #[makro_použití] atribut importuje makra z raketa modul.

Zde je obslužná funkce, která poskytuje HTML na vyžádání:

#[dostat("/")]
fnAhoj světe() -> content:: Html'statickýstr> {
obsah:: Html("

Ahoj světe!

"
)
}

The Ahoj světe funkce vrací statický řetězec HTML s příponou obsah:: Html funkce.

Zde je deklarace konfigurační struktury pro server (konvence rámce Rocket):

strukturovatKonfigurace {
přístav: u16,
}

#[dostat("/přístav")]
fnpřístav(config: State) -> Tětiva {
formát!("Server běží na portu {}", config.port)
}

Když spustíte server, můžete zadávat požadavky na /port koncový bod pro stav portu.

Nakonec vytvoříte instanci serveru s zapálit funkce. Přidejte konfigurace, připojte trasy a spusťte server:

fnhlavní() {
nechat config = Config { port: 8000 };

raketa:: zapálit()
.manage (config)
.mount("/", trasy![hello_world, přístav])
.zahájení();
}

The config proměnná je instancí třídy Konfigurace strukturovat. The zapálit funkce spouští instanci serveru, spravovat metoda přidá konfiguraci na server a namontovat metoda připojí funkci handleru na základní trasy. Konečně, zahájení metoda spustí server, aby naslouchal na zadaném portu.

S WASM můžete vytvářet výkonné webové aplikace v rezu

WebAssembly (WASM) je binární formát instrukcí navržený pro spouštění v prohlížečích a dalších zařízeních. WASM poskytuje nízkoúrovňový formát bajtového kódu, který mohou vyšší programovací jazyky jako Rust použít jako cíl kompilace.

S WASM můžete zkompilovat svůj Rust kód do binárního formátu, který může spustit většina populárních prohlížečů. WASM otevírá svět možností pro vytváření robustních webových aplikací v Rustu, včetně full-stack webových aplikací.