Naučite se zgraditi spletni strežnik HTTP po meri z Rustovim paketom Actix ali Rocket.

HTTP za prenos informacij in podatkov uporablja arhitekturo odjemalec-strežnik. Ena od značilnosti strežniških programskih jezikov, kot je Rust, je razvoj strežnikov in odjemalskih aplikacij za interakcijo s storitvami, ki temeljijo na HTTP.

Rust je primeren za izdelavo strežnikov HTTP zaradi svojih varnostnih, zmogljivostnih in zanesljivih lastnosti. Rustovi zaboji tretjih oseb, kot sta Actix in Rocket, so priljubljeni za gradnjo sofisticiranih spletnih strežnikov, ki lahko prenesejo velik promet.

Zakaj bi morali uporabiti Rust za razvoj spletnega strežnika HTTP?

Rust je pridobil priljubljenost pri razvoju spletnih strežnikov, saj so nekatere funkcije jezika ravno tiste zahteve za izdelavo večine spletnih strežnikov.

Uporaba Rusta zagotavlja učinkovito prilagajanje vaše aplikacije, zaradi česar je jezik idealen za izdelavo visoko zmogljivih aplikacij. Tukaj so posebni razlogi, zakaj razmisliti o uporabi Rusta za vaš spletni strežnik in druge aplikacije na strani strežnika.

instagram viewer

Visoka zmogljivost Rusta

Visoka zmogljivost je eden od razlogov, zakaj je Rust odlična izbira za izdelavo spletnih strežnikov HTTP. Rust zagotavlja dostop na nizki ravni do sistemskih virov, vključno s pomnilnikom in procesorjem, kar vam omogoča pisanje kode, ki teče hitreje z manj viri kot drugi jeziki na strani strežnika.

Poleg tega Rustov sistem lastništva odpravlja potrebo po zbiranju smeti v času prevajanja, kar je eden od razlogov, zakaj so nekateri jeziki na strani strežnika počasni.

Varnost in varnost

Lastniški sistem upravljanja pomnilnika Rust naredi jezik varen za razvoj spletnih strežnikov. Ne doživite ničelnih ali visečih referenc kazalcev, ki lahko povzročijo uhajanje pomnilnika in druge varnostne ranljivosti.

Rustov lastniški sistem preprečuje te pogoste napake, da zagotovi varnost vašega strežnika in aplikacij. Rust se osredotoča tudi na preprečevanje prelivanja medpomnilnika in drugih napak, povezanih s pomnilnikom.

Sočasnost

Sočasnost je zmožnost zagona več enot programa na nevrsten način, ne da bi to vplivalo na izhod. Izhod sočasnega programa mora biti enak izhodu asinhronega programa.

Sočasnost lahko znatno vpliva na zmogljivost vaše aplikacije, saj morajo strežniki obravnavati več zahtev hkrati. Rust zagotavlja podporo za sobivanje z lahkim modelom navojev.

Bistvo hkratnega programiranja v Rustu je, da vam lastniški sistem omogoča pisanje kode, varne za niti, brez potrebe po ključavnicah in drugih primitivih za sinhronizacijo.

Standardna knjižnica Rust in paketi tretjih oseb v ekosistemu Rust zagotoviti sodobno orodje za učinkovito razvoj spletnega strežnika.

Cargo, Rustov upravitelj paketov, poenostavlja upravljanje odvisnosti in gradi procese. Poleg tega ima Rust odlično podporo IDE z orodji, kot je Rust Analyzer, ki zagotavlja brezhibno dokončanje kode, označevanje napak in druge funkcije.

Pregled knjižnic Actix in Rocket

Standardna knjižnica Rust ima večino pripomočkov, ki jih boste potrebovali za izdelavo spletnih strežnikov. Knjižnice tretjih oseb, kot so Raketa in Actix poenostavite izdelavo aplikacij na strani strežnika z Rust.

Actix in Raketa sta priljubljena spletna ogrodja Rust, vendar se knjižnici razlikujeta po zasnovi in ​​funkcijah.

Rocket je spletno ogrodje na visoki ravni, ki daje prednost produktivnosti in enostavni uporabi. Rocket ponuja veliko abstrakcij in sintaksnega sladkorja za izdelavo spletnih aplikacij v Rustu. Rocket je priljubljen tudi zaradi močnega tipkanja in intuitivnega dizajna API-ja.

Rocket lahko dodate kot odvisnost projekta v svojem Cargo.toml datoteko za začetek gradnje spletnih aplikacij v Rust:

[odvisnosti]
raketa = "0.4.11"

Po drugi strani je Actix-web ogrodje nizke ravni, ki daje prednost zmogljivosti in razširljivosti. Actix izkorišča model sočasnosti, ki temelji na igralcu, in zagotavlja neblokirni V/I, zaradi česar je paket idealen za izdelavo zmogljivih spletnih aplikacij.

Dodajte Actix kot odvisnost projekta v odvisnosti del vašega Cargo.toml mapa:

[odvisnosti]
actix-web = "4.3.1"

Izbira knjižnice za vaš projekt bo odvisna od specifikacij vašega projekta, funkcij knjižnice in vaših izkušenj z Rust in HTTP.

Izdelava preprostega spletnega strežnika v Rustu

Po ustvarjanju projekta Rust in dodajanju katerega koli ogrodja Rocket ali Actix v odvisnosti vašega projekta v Cargo.toml datoteko, ste pripravljeni, da začnete graditi spletni strežnik v Rustu.

Izdelava preprostega spletnega strežnika z Actixom

Pri gradnji spletnih storitev v Rust lahko uporabite serializator za zahteve.

Serde je priljubljena knjižnica Rust za serializacijo in deserializacijo podatkov med vrstami Rust in formati podatkov, kot so JSON, YAML in TOML. Serde zagotavlja okvir za definiranje pretvorbe podatkov med podatkovnimi strukturami Rust in ustreznimi predstavitvami v drugih formatih podatkov.

Tukaj je navodilo za dodajanje Serde kot paketa tretje osebe za vaš projekt.

[odvisnosti]
serde = { različica = "1.0.159", funkcije = ["izpeljati"] }

Ko dodate Serde in Actix kot odvisnosti projekta, lahko ustvarite osnovni spletni strežnik z Rust. Tukaj je opisano, kako lahko nastavite preprosto Pozdravljen, svet! spletni strežnik, ki zapiše niz odjemalcu z Actixom:

Najprej uvozite potrebne module in vrste iz actix_web in serde zaboji:

uporaba actix_web::{get, web, App, HttpResponse, HttpServer, Responder};
uporaba serde::{Deserializiraj, Serializiraj};

Uporabili boste serde za serializacijo sporočila odjemalcu s strukturo. Serde bo strukturo pretvoril v JSON za odjemalca. Tukaj je struktura sporočila:

#[izpelji (razhroščevanje, serializacija, deserializacija)]
structSporočilo {
sporočilo: Vrvica,
}

Zdaj lahko definirate funkcijo obdelovalca za končno točko. Na vrh vaše funkcije obdelovalca lahko dodate dekoratorje za vedenje po meri:

#[dobi("/")]
asinhfnzdravo() -> impl odgovor {
HttpResponse::V redu().json (Sporočilo {
sporočilo: "Pozdravljen, svet!".to_owned(),
})
}

The zdravo funkcija obdelovalca obravnava zahteve GET. Funkcija vrne tip, ki implementira Odzivnik lastnost iz Actix paket.

The json metoda HttpResponse:: Ok() tip prevzame primerek strukture, ki Serde obravnava pod pokrovom in vrne odgovor stranki.

Ko definirate končno točko, lahko zaženete primerek strežnika in namestite končno točko na pot.

#[actix_web:: main]
asinhfnglavni() -> std:: io::Rezultat {
HttpServer:: novo(|| Aplikacija:: novo().service (zdravo))
.bind("127.0.0.1:8080")?
.run()
.čakati
}

The HttpServer:: novo funkcija je nov primerek strežnika. The glavni funkcija se zažene in strežnik namesti zdravo funkcijo obravnave z novim primerkom aplikacije. The vezati metoda poveže strežnik z navedenim URL-jem in teči funkcija poganja strežnik.

Izdelava preprostega spletnega strežnika z Rocket

Rocket je minimalističen, tako da lahko nastavite preprost spletni strežnik brez kakršnih koli odvisnosti razen Raketa zaboj.

Tukaj je opisano, kako nastavite preprost strežnik z a Pozdravljen, svet! končna točka z uporabo Rocket:

Najprej uvozite potrebne odvisnosti za vaš strežnik.

#![funkcija (proc_macro_hygiene, decl_macro)]

#[makro_uporaba]
eksternzaboj raketa;

// uvozi iz zaboja Rocket
uporaba raketa:: odziv:: vsebina;
uporaba raketa:: država;

The #![funkcija (proc_macro_hygiene, decl_macro)] atribut omogoča eksperimentalne funkcije Rust za ogrodje Rocket. The #[makro_uporaba] uvozi makre iz raketa modul.

Tukaj je funkcija za obravnavo, ki na zahtevo streže HTML:

#[dobi("/")]
fnPozdravljen, svet() -> vsebina:: Html'statičnostr> {
vsebina:: Html("

Pozdravljen, svet!

"
)
}

The Pozdravljen, svet funkcija vrne statični niz HTML z vsebina:: Html funkcijo.

Tukaj je deklaracija konfiguracijske strukture za strežnik (okvirna konvencija Rocket):

structConfig {
pristanišče: u16,
}

#[dobi("/port")]
fnpristanišče(konfiguracija: država) -> Vrvica {
format!("Strežnik teče na vratih {}", config.port)
}

Ko zaženete strežnik, lahko pošiljate zahteve do /port končna točka za status vrat.

Na koncu boste ustvarili primerek strežnika z Vžgati funkcijo. Dodajte konfiguracije, namestite poti in zaženite strežnik:

fnglavni() {
pustiti config = Config { vrata: 8000 };

raketa:: vžgi()
.manage (konfiguracija)
.mount("/", poti![hello_world, pristanišče])
.kosilo();
}

The konfiguracija spremenljivka je primerek Config struct. The Vžgati funkcija zažene primerek strežnika, upravljati doda konfiguracijo strežniku in mount metoda namesti funkcijo upravljalnika na osnovne poti. Končno, kosilo metoda zažene strežnik za poslušanje na določenih vratih.

Z WASM lahko zgradite zmogljive spletne aplikacije v Rustu

WebAssembly (WASM) je binarni format navodil, zasnovan za izvajanje v brskalnikih in drugih napravah. WASM zagotavlja nizkonivojsko obliko bajtne kode, ki jo programski jeziki višje ravni, kot je Rust, lahko uporabljajo kot cilj prevajanja.

Z WASM lahko svojo kodo Rust prevedete v binarno obliko, ki jo lahko izvede večina priljubljenih brskalnikov. WASM odpira svet možnosti za izdelavo robustnih spletnih aplikacij v Rustu, vključno s spletnimi aplikacijami s polnim skladom.