Naučite kako izgraditi prilagođeni HTTP web poslužitelj koristeći Rust Actix ili Rocket paket.

HTTP koristi arhitekturu klijent-poslužitelj za prijenos informacija i podataka. Jedna od značajki programskih jezika na strani poslužitelja kao što je Rust je razvoj poslužitelja i klijentskih aplikacija za interakciju s uslugama temeljenim na HTTP-u.

Rust je prikladan za izgradnju HTTP poslužitelja zahvaljujući svojim značajkama sigurnosti, performansi i pouzdanosti. Rustovi sanduci trećih strana kao što su Actix i Rocket popularni su za izgradnju sofisticiranih web poslužitelja koji mogu podnijeti veliki promet.

Zašto biste trebali koristiti Rust za razvoj HTTP web poslužitelja?

Rust je stekao popularnost za razvoj web poslužitelja budući da su neke od značajki jezika upravo zahtjevi za izgradnju većine web poslužitelja.

Korištenje Rusta osigurava učinkovito skaliranje vaše aplikacije, čineći jezik idealnim za izradu aplikacija visokih performansi. Evo konkretnih razloga za razmatranje korištenja Rusta za vaš web poslužitelj i druge aplikacije na strani poslužitelja.

instagram viewer

Visoke performanse Rusta

Visoke performanse jedan su od razloga zašto je Rust odličan izbor za izgradnju HTTP web poslužitelja. Rust pruža nisku razinu pristupa sistemskim resursima, uključujući memoriju i CPU, omogućujući vam pisanje koda koji radi brže s manje resursa nego drugi jezici na strani poslužitelja.

Osim toga, Rustov sustav vlasništva eliminira potrebu za sakupljanjem smeća tijekom kompajliranja, što je jedan od razloga zašto su neki jezici na strani poslužitelja spori.

Sigurnost i osiguranje

Rustov vlasnički sustav upravljanja memorijom čini jezik sigurnim za razvoj web poslužitelja. Nemate nulte ili viseće reference pokazivača koje mogu dovesti do curenja memorije i drugih sigurnosnih propusta.

Rustov vlasnički sustav sprječava ove uobičajene pogreške kako bi vaš poslužitelj i aplikacije bili sigurni. Rust se također fokusira na sprječavanje prekoračenja međuspremnika i drugih grešaka povezanih s memorijom.

Konkurencija

Konkurentnost je mogućnost pokretanja više jedinica programa na način izvan reda bez utjecaja na izlaz. Izlaz paralelnog programa trebao bi biti isti kao i izlaz asinkronog programa.

Konkurentnost može značajno utjecati na izvedbu vaše aplikacije budući da poslužitelji moraju obrađivati ​​više zahtjeva istovremeno. Rust pruža podršku za suživot s laganim modelom navoja.

Suština istovremenog programiranja u Rustu je da vam sustav vlasništva omogućuje pisanje koda koji je siguran za niti bez potrebe za zaključavanjima i drugim primitivima sinkronizacije.

Standardna biblioteka Rust i paketi trećih strana u Rust ekosustavu pružiti suvremeni alat za učinkovito razvoj web poslužitelja.

Cargo, Rustov upravitelj paketa, pojednostavljuje upravljanje ovisnostima i gradi procese. Osim toga, Rust ima izvrsnu podršku za IDE s alatima kao što je Rust Analyzer koji pružaju besprijekorno dovršavanje koda, označavanje pogrešaka i druge značajke.

Pregled knjižnica Actix i Rocket

Rustova standardna biblioteka ima većinu uslužnih programa koji će vam trebati za izgradnju web poslužitelja. Knjižnice trećih strana poput Raketa i Actix pojednostavite izradu aplikacija na strani poslužitelja s Rustom.

Actix i Raketa su popularni Rust web okviri, ali se biblioteke razlikuju po dizajnu i značajkama.

Rocket je web okvir visoke razine koji daje prednost produktivnosti i jednostavnosti korištenja. Rocket pruža puno apstrakcija i šećera sintakse za izradu web aplikacija u Rustu. Rocket je također popularan zbog svog snažnog tipkanja i intuitivnog API dizajna.

Možete dodati Rocket kao ovisnost projekta u svoj Teret.toml datoteku za početak izrade web aplikacija u Rustu:

[ovisnosti]
raketa = "0.4.11"

S druge strane, Actix-web je okvir niske razine koji daje prednost performansama i skalabilnosti. Actix koristi model konkurentnosti temeljen na akterima i pruža neblokirajući I/O što paket čini idealnim za izgradnju učinkovitih web aplikacija.

Dodajte Actix kao ovisnost projekta u ovisnosti dio vašeg Teret.toml datoteka:

[ovisnosti]
actix-web = "4.3.1"

Odabir biblioteke za vaš projekt ovisit će o specifikacijama vašeg projekta, značajkama biblioteke i vašem iskustvu s Rustom i HTTP-om.

Izrada jednostavnog web poslužitelja u Rustu

Nakon stvaranja Rust projekta i dodavanja bilo kojeg okvira Rocket ili Actix u ovisnosti vašeg projekta u Teret.toml datoteku, spremni ste za početak izgradnje web poslužitelja u Rustu.

Izrada jednostavnog web poslužitelja s Actixom

Možete koristiti serijalizator za zahtjeve kada gradite web usluge u Rustu.

Serde je popularna Rust biblioteka za serijalizaciju i deserijalizaciju podataka između Rust vrsta i formata podataka kao što su JSON, YAML i TOML. Serde pruža okvir za definiranje pretvorbe podataka između Rust podatkovnih struktura i odgovarajućih prikaza u drugim formatima podataka.

Evo upute za dodavanje Serdea kao paketa treće strane za vaš projekt.

[ovisnosti]
serde = { verzija = "1.0.159", karakteristike = ["izvesti"] }

Nakon što dodate Serde i Actix kao ovisnosti o projektu, možete pokrenuti osnovni web poslužitelj s Rustom. Evo kako možete postaviti jednostavan Pozdrav svijete! web poslužitelj koji piše string klijentu s Actixom:

Najprije uvezite potrebne module i tipove iz actix_web i serde sanduci:

koristiti actix_web::{get, web, aplikacija, HttpResponse, HttpServer, Responder};
koristiti serde::{Deserialize, Serialize};

Vi ćete koristiti serde za serijalizaciju poruke klijentu sa strukturom. Serde će pretvoriti strukturu u JSON za klijenta. Evo strukture poruke:

#[derive (Debug, Serialize, Deserialize)]
strukturiratiPoruka {
poruka: Niz,
}

Sada možete definirati funkciju rukovatelja za krajnju točku. Na vrhu svoje funkcije rukovatelja možete dodati dekoratore za prilagođena ponašanja:

#[dobiti("/")]
asinkronifnzdravo() -> impl Odgovarač {
HttpResponse::U redu().json (Poruka {
poruka: "Pozdrav svijete!".to_owned(),
})
}

The zdravo funkcija rukovatelja obrađuje GET zahtjeve. Funkcija vraća tip koji implementira Odgovarač osobina iz Actix paket.

The json metoda HttpResponse:: Ok() tip uzima instancu strukture koja Serde obrađuje ispod haube i vraća odgovor klijentu.

Nakon definiranja krajnje točke, možete pokrenuti instancu poslužitelja i postaviti krajnju točku na rutu.

#[actix_web:: main]
asinkronifnglavni() -> std:: io::Proizlaziti {
HttpServer:: new(|| App:: new().service (zdravo))
.vezati("127.0.0.1:8080")?
.trčanje()
.čekati
}

The HttpServer:: novo funkcija je nova instanca poslužitelja. The glavni funkcija se pokreće, a poslužitelj montira zdravo funkcija rukovatelja s novom instancom aplikacije. The vezati metoda veže poslužitelj na navedeni URL, a trčanje funkcija pokreće poslužitelj.

Izrada jednostavnog web poslužitelja pomoću Rocketa

Rocket je minimalistički, tako da možete postaviti jednostavan web poslužitelj bez ikakvih ovisnosti osim o Raketa sanduk.

Evo kako postaviti jednostavan poslužitelj s Pozdrav svijete! krajnja točka pomoću Rocketa:

Prvo uvezite potrebne ovisnosti za vaš poslužitelj.

#![značajka (proc_macro_hygiene, decl_macro)]

#[macro_use]
vanjskisanduk raketa;

// uvozi iz sanduka Rocket
koristiti raketa:: odgovor:: sadržaj;
koristiti raketa:: Država;

The #![značajka (proc_macro_hygiene, decl_macro)] atribut omogućuje Rust eksperimentalne značajke za okvir Rocket. The #[macro_use] atribut uvozi makronaredbe iz raketa modul.

Evo funkcije rukovatelja koja poslužuje HTML na zahtjev:

#[dobiti("/")]
fnPozdrav svijete() -> sadržaj:: Html'statičkistr> {
sadržaj:: Html("

Pozdrav svijete!

"
)
}

The Pozdrav svijete funkcija vraća HTML statički niz s sadržaj:: Html funkcija.

Evo deklaracije konfiguracijske strukture za poslužitelj (konvencija okvira Rocket):

strukturiratiKonfiguracija {
luka: u16,
}

#[dobiti("/luka")]
fnluka(konfiguracija: država) -> Niz {
format!("Poslužitelj radi na priključku {}", config.port)
}

Kada pokrenete poslužitelj, možete slati zahtjeve prema /port krajnja točka za status priključka.

Konačno, stvorit ćete instancu poslužitelja s zapaliti funkcija. Dodajte konfiguracije, montirajte rute i pokrenite poslužitelj:

fnglavni() {
neka config = Config { port: 8000 };

raketa:: zapali()
.manage (konfiguracija)
.mount("/", rute![hello_world, luka])
.pokreni();
}

The konfiguracija varijabla je instanca Konfiguracija strukturirati The zapaliti funkcija pokreće instancu poslužitelja, upravljati metoda dodaje konfiguraciju poslužitelju i montirati metoda postavlja funkciju rukovatelja na osnovne rute. Konačno, lansirati metoda pokreće poslužitelj za slušanje na navedenom priključku.

Možete izgraditi moćne web aplikacije u Rustu s WASM-om

WebAssembly (WASM) je binarni format instrukcija dizajniran za izvođenje u preglednicima i drugim uređajima. WASM pruža format bajtkoda niske razine koji programski jezici više razine poput Rusta mogu koristiti kao cilj kompilacije.

Pomoću WASM-a možete prevesti svoj Rust kod u binarni format koji većina popularnih preglednika može izvršiti. WASM otvara svijet mogućnosti za izgradnju robusnih web aplikacija u Rustu, uključujući full-stack web aplikacije.