Sužinokite, kaip sukurti pasirinktinį HTTP žiniatinklio serverį naudojant Rust's Actix arba Rocket paketą.

HTTP naudoja kliento-serverio architektūrą informacijai ir duomenims perduoti. Viena iš serverio pusės programavimo kalbų, tokių kaip „Rust“, funkcijų yra serverių ir klientų programėlių, skirtų sąveikauti su HTTP pagrįstomis paslaugomis, kūrimas.

Rust tinka HTTP serveriams kurti dėl savo saugos, našumo ir patikimumo savybių. Rust trečiųjų šalių dėžės, tokios kaip Actix ir Rocket, yra populiarios kuriant sudėtingus žiniatinklio serverius, galinčius valdyti didelį srautą.

Kodėl HTTP žiniatinklio serverio kūrimui turėtumėte naudoti Rust?

Rust įgijo populiarumą kuriant žiniatinklio serverius, nes kai kurios kalbos funkcijos yra būtent tokios, kad būtų galima sukurti daugumą žiniatinklio serverių.

Naudojant Rust užtikrinamas efektyvus programos mastelis, todėl kalba idealiai tinka kuriant didelio našumo programas. Čia pateikiamos konkrečios priežastys, kodėl verta naudoti Rust žiniatinklio serveryje ir kitose serverio programose.

instagram viewer

Didelis rūdžių našumas

Didelis našumas yra viena iš priežasčių, kodėl Rust yra puikus pasirinkimas kuriant HTTP žiniatinklio serverius. Rust suteikia žemo lygio prieigą prie sistemos išteklių, įskaitant atmintį ir centrinį procesorių, todėl galite rašyti kodą, kuris veikia greičiau ir naudojant mažiau išteklių nei kitos serverio pusės kalbos.

Be to, „Rust“ nuosavybės sistema pašalina šiukšlių rinkimo poreikį kompiliavimo metu, o tai yra viena iš priežasčių, kodėl kai kurios serverio kalbos yra lėtos.

Saugumas ir apsauga

Dėl „Rust“ nuosavybės valdymo atminties valdymo sistemos kalba saugi žiniatinklio serverio kūrimui. Neturite nulinių arba kabančių nuorodų, dėl kurių gali atsirasti atminties nutekėjimo ir kitų saugos spragų.

Rusto nuosavybės sistema apsaugo nuo šių dažnų klaidų, kad apsaugotų jūsų serverį ir programas. Rust taip pat daug dėmesio skiria buferio perpildymo ir kitų su atmintimi susijusių klaidų prevencijai.

Lygiagretumas

Lygiagretumas – tai galimybė paleisti kelis programos vienetus netvarkingai, nepaveikiant išvesties. Lygiagrečios programos išvestis turi būti tokia pati kaip asinchroninės programos išvestis.

Lygiagretumas gali labai paveikti jūsų programos našumą, nes serveriai turi apdoroti kelias užklausas vienu metu. Rūdys palaiko sambūvį su lengvu sriegimo modeliu.

„Rust“ lygiagrečiojo programavimo pranašumas yra tas, kad nuosavybės sistema leidžia rašyti saugų kodą be užraktų ir kitų sinchronizavimo primityvų.

Rust Standard Library ir trečiųjų šalių paketai Rust ekosistemoje suteikti modernius įrankius efektyviam interneto serverio kūrimas.

„Cargo“, „Rust“ paketų tvarkyklė, supaprastina priklausomybės valdymą ir kuria procesus. Be to, „Rust“ turi puikų IDE palaikymą su įrankiais, tokiais kaip „Rust Analyzer“, kurie užtikrina sklandų kodo užbaigimą, klaidų paryškinimą ir kitas funkcijas.

Actix ir Rocket bibliotekų apžvalga

„Rust“ standartinėje bibliotekoje yra dauguma paslaugų, kurių jums prireiks kuriant žiniatinklio serverius. Trečiųjų šalių bibliotekos kaip Raketa ir Actix supaprastinkite serverio programų kūrimą naudodami Rust.

Actix ir Raketa yra populiarios „Rust“ žiniatinklio sistemos, tačiau bibliotekos skiriasi dizainu ir funkcijomis.

„Rocket“ yra aukšto lygio žiniatinklio sistema, teikianti pirmenybę produktyvumui ir naudojimo paprastumui. „Rocket“ suteikia daug abstrakcijų ir sintaksės, kuriant žiniatinklio programas „Rust“. „Rocket“ taip pat populiari dėl savo tvirto spausdinimo ir intuityvaus API dizaino.

Galite pridėti „Rocket“ kaip projekto priklausomybę Krovinys.toml failą, kad pradėtumėte kurti žiniatinklio programas „Rust“:

[priklausomybės]
raketa = "0.4.11"

Kita vertus, Actix-web yra žemo lygio sistema, teikianti pirmenybę našumui ir mastelio keitimui. Actix naudoja aktoriumi pagrįstą lygiagretumo modelį ir teikia neblokuojančią I/O, todėl paketas idealiai tinka kuriant našias žiniatinklio programas.

Pridėkite Actix kaip projekto priklausomybę priklausomybės jūsų skyrius Krovinys.toml failas:

[priklausomybės]
actix-web = "4.3.1"

Bibliotekos pasirinkimas projektui priklausys nuo jūsų projekto specifikacijų, bibliotekos funkcijų ir jūsų patirties naudojant Rust ir HTTP.

Paprasto žiniatinklio serverio kūrimas Ruste

Sukūrę Rust projektą ir pridėję bet kurią iš Rocket arba Actix karkasų prie projekto priklausomybių Krovinys.toml failą, esate pasirengę pradėti kurti žiniatinklio serverį „Rust“.

Sukurkite paprastą žiniatinklio serverį su Actix

Kurdami žiniatinklio paslaugas Rust užklausoms galite naudoti serializatorių.

„Serde“ yra populiari „Rust“ biblioteka, skirta „Rust“ tipų ir duomenų formatų, pvz., JSON, YAML ir TOML, duomenų serializavimui ir deserializavimui. „Serde“ suteikia duomenų konvertavimo tarp „Rust“ duomenų struktūrų ir atitinkamų kitų duomenų formatų vaizdų apibrėžimo sistemą.

Štai direktyva, kaip pridėti „Serde“ kaip trečiosios šalies paketą savo projektui.

[priklausomybės]
serde = { versija = "1.0.159", funkcijos = ["išvesti"] }

Pridėję Serde ir Actix kaip projekto priklausomybes, galite sukurti pagrindinį žiniatinklio serverį naudodami Rust. Štai kaip galite nustatyti paprastą Labas pasauli! žiniatinklio serveris, kuris rašo eilutę klientui su Actix:

Pirmiausia importuokite reikiamus modulius ir tipus iš actix_web ir serde dėžės:

naudoti actix_web::{gauti, žiniatinklis, programa, „HttpResponse“, „HttpServer“, „Responder“};
naudoti serde::{Deserializuoti, serializuoti};

Jūs naudosite serde serializuoti pranešimą klientui su struktūra. „Serde“ klientui konvertuos struktūrą į JSON. Štai pranešimo struktūra:

#[išvesti (derinti, suskirstyti į seriją, deserializuoti)]
struktūraPranešimas {
žinutė: Styga,
}

Dabar galite apibrėžti pabaigos taško tvarkyklės funkciją. Savo tvarkyklės funkcijos viršuje galite pridėti dekoratorių, skirtų pasirinktinai elgsenai:

#[gauti("/")]
asyncfnSveiki() -> impl Atsakovas {
HttpResponse::Gerai().json (pranešimas {
žinutė: "Labas pasauli!".to_owned(),
})
}

The Sveiki tvarkyklės funkcija tvarko GET užklausas. Funkcija grąžina tipą, kuris įgyvendina Atsakovas bruožas iš Actix paketą.

The json metodas HttpResponse:: Gerai() tipas paima struktūros pavyzdį, kad Serde tvarko po gaubtu ir grąžina atsakymą klientui.

Apibrėžę galinį tašką, galite paleisti serverio egzempliorių ir prijungti galinį tašką į maršrutą.

#[actix_web:: pagrindinis]
asyncfnpagrindinis() -> std:: io::Rezultatas {
HttpServer:: new(|| App:: new().service (labas))
.įpareigoti("127.0.0.1:8080")?
.run()
.laukti
}

The HttpServer:: naujas funkcija yra naujas serverio egzempliorius. The pagrindinis funkcija paleidžiama, o serveris prijungia Sveiki tvarkyklės funkcija su nauju programos egzemplioriumi. The įpareigoti metodas susieja serverį su nurodytu URL ir paleisti funkcija paleidžia serverį.

Sukurkite paprastą žiniatinklio serverį su raketa

„Rocket“ yra minimalistinis, todėl galite nustatyti paprastą žiniatinklio serverį be jokių priklausomybių, išskyrus Raketa dėžė.

Štai kaip nustatyti paprastą serverį su a Labas pasauli! galutinis taškas naudojant „Rocket“:

Pirmiausia importuokite reikiamas serverio priklausomybes.

#![funkcija (proc_macro_hygiene, decl_macro)]

#[makro_naudojimas]
išorinisdėžė raketa;

// importas iš raketų dėžės
naudoti raketa:: atsakymas:: turinys;
naudoti raketa:: valstybė;

The #![funkcija (proc_macro_hygiene, decl_macro)] atributas įgalina „Rust“ eksperimentines „Rocket“ sistemos funkcijas. The #[makro_naudojimas] atributas importuoja makrokomandas iš raketa modulis.

Štai tvarkyklės funkcija, kuri pagal užklausą aptarnauja HTML:

#[gauti("/")]
fnLabas pasauli() -> turinys:: HTML'statinisg> {
turinys:: HTML("

Labas pasauli!

"
)
}

The Labas pasauli funkcija grąžina HTML statinę eilutę su turinys:: HTML funkcija.

Štai serverio konfigūracijos struktūros deklaracija (Rocket framework konvencija):

struktūrakonfig {
prievadas: u16,
}

#[gauti("/port")]
fnuostas(konfigūracija: būsena) -> Styga {
formatu!(„Serveris veikia {} prievade“, config.port)
}

Kai paleisite serverį, galite pateikti užklausas /port uosto būsenos galinis taškas.

Galiausiai sukursite serverio egzempliorių su uždegti funkcija. Pridėkite konfigūracijas, sumontuokite maršrutus ir paleiskite serverį:

fnpagrindinis() {
leisti config = Config { prievadas: 8000 };

raketa:: uždegti()
.manage (config)
.mount("/", maršrutai![hello_world, uostas])
.launch();
}

The konfig kintamasis yra pavyzdys konfig struktūra. The uždegti funkcija paleidžia serverio egzempliorių, valdyti metodas prideda konfigūraciją prie serverio ir kalnas metodas sujungia prižiūrėtojo funkciją pagrindiniuose maršrutuose. Galiausiai, paleisti metodas paleidžia serverį klausytis nurodyto prievado.

Naudodami WASM galite sukurti galingas žiniatinklio programas Rust

WebAssembly (WASM) yra dvejetainis instrukcijų formatas, skirtas vykdyti naršyklėse ir kituose įrenginiuose. WASM suteikia žemo lygio baitinio kodo formatą, kurį aukštesnio lygio programavimo kalbos, pvz., Rust, gali naudoti kaip kompiliavimo tikslą.

Naudodami WASM galite sukompiliuoti savo Rust kodą į dvejetainį formatą, kurį gali vykdyti dauguma populiariausių naršyklių. WASM atveria daugybę galimybių kurti patikimas žiniatinklio programas „Rust“, įskaitant visas žiniatinklio programas.