Opi rakentamaan mukautettu HTTP-verkkopalvelin joko Rust's Actix- tai Rocket-paketilla.

HTTP käyttää asiakas-palvelin-arkkitehtuuria tiedon ja tiedonsiirrossa. Yksi palvelinpuolen ohjelmointikielten, kuten Rust, ominaisuuksista on palvelimien ja asiakassovellusten kehittäminen vuorovaikutukseen HTTP-pohjaisten palvelujen kanssa.

Rust soveltuu HTTP-palvelimien rakentamiseen turvallisuus-, suorituskyky- ja luotettavuusominaisuuksiensa ansiosta. Rustin kolmannen osapuolen laatikot, kuten Actix ja Rocket, ovat suosittuja kehittyneiden verkkopalvelimien rakentamiseen, jotka pystyvät käsittelemään suurta liikennettä.

Miksi sinun pitäisi käyttää Rustia HTTP-verkkopalvelimen kehittämiseen?

Rust on kerännyt suosiota verkkopalvelinkehityksessä, koska jotkin kielen ominaisuudet ovat täsmälleen vaatimukset useimpien verkkopalvelimien rakentamiselle.

Rustin käyttäminen varmistaa, että sovelluksesi skaalautuu tehokkaasti, mikä tekee kielestä ihanteellisen tehokkaiden sovellusten rakentamiseen. Tässä on erityisiä syitä harkita Rustin käyttöä verkkopalvelimessasi ja muissa palvelinpuolen sovelluksissa.

instagram viewer

Rustin korkea suorituskyky

Korkea suorituskyky on yksi syy, miksi Rust on erinomainen valinta HTTP-verkkopalvelimien rakentamiseen. Rust tarjoaa matalan tason pääsyn järjestelmäresursseihin, mukaan lukien muistiin ja prosessoriin, joten voit kirjoittaa koodia, joka toimii nopeammin vähemmillä resursseilla kuin muut palvelinpuolen kielet.

Lisäksi Rustin omistusjärjestelmä eliminoi roskien keräämisen tarpeen käännöshetkellä, mikä on yksi syy siihen, miksi jotkut palvelinpuolen kielet ovat hitaita.

Turvallisuus

Rustin muistinhallinnan omistusjärjestelmä tekee kielestä turvallisen verkkopalvelinkehitystä varten. Et koe tyhjiä tai roikkuvia osoitinviittauksia, jotka voivat johtaa muistivuotojin ja muihin tietoturva-aukoihin.

Rustin omistusjärjestelmä estää nämä yleiset virheet pitämään palvelimesi ja sovelluksesi turvassa. Rust keskittyy myös puskurin ylivuotojen ja muiden muistiin liittyvien virheiden estämiseen.

Samanaikaisuus

Samanaikaisuus on kyky suorittaa useita ohjelman yksiköitä epäjärjestyksessä ilman, että se vaikuttaa tuottoon. Samanaikaisen ohjelman tulosteen tulee olla sama kuin asynkronisen ohjelman tulosteen.

Samanaikaisuus voi vaikuttaa merkittävästi sovelluksesi suorituskykyyn, koska palvelimien on käsiteltävä useita pyyntöjä samanaikaisesti. Rust tukee rinnakkaiseloa kevyen kierremallin kanssa.

Rinnakkaisohjelmoinnin kastike Rustissa on, että omistajuusjärjestelmä mahdollistaa säikeen turvakoodin kirjoittamisen ilman lukkojen ja muiden synkronointiprimitiivien tarvetta.

Rust Standard Library ja kolmannen osapuolen paketit Rust-ekosysteemissä tarjota nykyaikaiset työkalut tehokkaaseen web-palvelimen kehittäminen.

Cargo, Rustin pakettihallinta, yksinkertaistaa riippuvuuden hallintaa ja rakentaa prosesseja. Lisäksi Rustilla on erinomainen IDE-tuki työkaluilla, kuten Rust Analyzer, jotka tarjoavat saumattoman koodin täydennyksen, virheiden korostuksen ja muita ominaisuuksia.

Katsaus Actix- ja Rocket-kirjastoista

Rustin standardikirjastossa on suurin osa verkkopalvelimien rakentamiseen tarvittavista apuohjelmista. Kolmannen osapuolen kirjastot pitävät Raketti ja Actix yksinkertaistaa palvelinpuolen sovellusten rakentamista Rustilla.

Actix ja Raketti ovat suosittuja Rust-verkkokehystä, mutta kirjastojen suunnittelu ja ominaisuudet eroavat toisistaan.

Rocket on korkean tason verkkokehys, joka asettaa etusijalle tuottavuuden ja helppokäyttöisyyden. Rocket tarjoaa paljon abstraktioita ja syntaksisokeria verkkosovellusten rakentamiseen Rustissa. Rocket on suosittu myös vahvan kirjoittamisen ja intuitiivisen API-suunnittelunsa vuoksi.

Voit lisätä Rocketin projektiriippuvuudeksi Cargo.toml tiedosto aloittaaksesi verkkosovellusten rakentamisen Rustissa:

[riippuvuudet]
raketti = "0.4.11"

Toisaalta Actix-web on matalan tason kehys, joka asettaa etusijalle suorituskyvyn ja skaalautuvuuden. Actix hyödyntää toimijapohjaista samanaikaisuusmallia ja tarjoaa estottoman I/O: n, mikä tekee paketista ihanteellisen tehokkaiden verkkosovellusten rakentamiseen.

Lisää Actix projektiriippuvuudeksi tiedostoon riippuvuuksia osa sinun Cargo.toml tiedosto:

[riippuvuudet]
actix-web = "4.3.1"

Kirjaston valitseminen projektillesi riippuu projektisi spesifikaatioista, kirjaston ominaisuuksista ja kokemuksestasi Rustista ja HTTP: stä.

Yksinkertaisen verkkopalvelimen rakentaminen Rustiin

Kun olet luonut Rust-projektin ja lisännyt minkä tahansa Rocket- tai Actix-kehyksen projektisi riippuvuuksiin Cargo.toml tiedosto, olet valmis aloittamaan verkkopalvelimen rakentamisen Rustissa.

Yksinkertaisen verkkopalvelimen rakentaminen Actixin avulla

Voit käyttää serialisoijaa pyyntöihin rakentaessasi verkkopalveluita Rustissa.

Serde on suosittu Rust-kirjasto tietojen sarjoittamiseksi ja sarjoittamiseksi Rust-tyyppien ja tietomuotojen, kuten JSON, YAML ja TOML, välillä. Serde tarjoaa puitteet tietojen muuntamisen määrittämiseen Rust-tietorakenteiden ja vastaavien esityksien välillä muissa tietomuodoissa.

Tässä on ohje Serden lisäämisestä kolmannen osapuolen paketiksi projektiisi.

[riippuvuudet]
serde = { versio = "1.0.159", ominaisuuksia = ["johtaa"] }

Kun olet lisännyt Serden ja Actixin projektiriippuvuuksiksi, voit luoda perusverkkopalvelimen Rustin avulla. Näin voit määrittää yksinkertaisen Hei maailma! verkkopalvelin, joka kirjoittaa merkkijonon asiakkaalle Actixin avulla:

Tuo ensin tarvittavat moduulit ja tyypit tiedostosta actix_web ja serde laatikot:

käyttää actix_web::{hanki, verkko, sovellus, HttpResponse, HttpServer, Responder};
käyttää serde::{Serialize, Serialize};

käytät serde sarjoittamaan asiakkaalle lähetettävän viestin structilla. Serde muuntaa rakenteen JSON-muotoon asiakkaalle. Tässä on viestin rakenne:

#[derive (debug, serialize, deserialize)]
structViesti {
viesti: merkkijono,
}

Voit nyt määrittää päätepisteen käsittelijän toiminnon. Käsittelijätoiminnon yläosassa voit lisätä sisustajia mukautettuja toimintoja varten:

#[saada("/")]
asynkfnHei() -> impl Vastaaja {
HttpResponse::Ok().json (viesti {
viesti: "Hei maailma!".to_owned(),
})
}

The Hei Käsittelijätoiminto käsittelee GET-pyynnöt. Funktio palauttaa tyypin, joka toteuttaa Vastaaja ominaisuus Actix paketti.

The json menetelmä HttpResponse:: Ok() tyyppi ottaa struct-esiintymän, joka Serde käsittelee konepellin alla ja palauttaa vastauksen asiakkaalle.

Kun olet määrittänyt päätepisteen, voit käynnistää palvelinesiintymän ja liittää päätepisteen reitille.

#[actix_web:: main]
asynkfnpää() -> std:: io::Tulos {
HttpServer:: uusi(|| Sovellus:: uusi().palvelu (hei))
.sitoa("127.0.0.1:8080")?
.juosta()
.odottaa
}

The HttpServer:: uusi toiminto on uusi palvelinesiintymä. The pää toiminto käynnistyy ja palvelin asentaa Hei käsittelijätoiminto uuden sovellusesiintymän kanssa. The sitoa menetelmä sitoo palvelimen määritettyyn URL-osoitteeseen ja juosta toiminto pyörittää palvelinta.

Yksinkertaisen verkkopalvelimen rakentaminen raketilla

Rocket on minimalistinen, joten voit määrittää yksinkertaisen verkkopalvelimen ilman muita riippuvuuksia kuin Raketti laatikko.

Näin määrität yksinkertaisen palvelimen a Hei maailma! päätepiste Rocketilla:

Tuo ensin tarvittavat riippuvuudet palvelimellesi.

#![ominaisuus (proc_macro_hygiene, decl_macro)]

#[macro_use]
ulkoinenlaatikko raketti;

// tuonti rakettilaatikosta
käyttää raketti:: vastaus:: sisältö;
käyttää raketti:: valtio;

The #![ominaisuus (proc_macro_hygiene, decl_macro)] attribuutti mahdollistaa Rustin kokeelliset ominaisuudet Rocket-kehykselle. The #[macro_use] attribuutti tuo makroja kohteesta raketti moduuli.

Tässä on käsittelijätoiminto, joka palvelee HTML: ää pyynnöstä:

#[saada("/")]
fnHei maailma() -> sisältö:: Html'staattinenstr> {
sisältö:: Html("

Hei maailma!

"
)
}

The Hei maailma funktio palauttaa staattisen HTML-merkkijonon kanssa Sisältö:: Html toiminto.

Tässä on palvelimen konfigurointirakenteen määritys (Rocket-kehyskäytäntö):

structKonfig {
portti: u16,
}

#[saada("/portti")]
fnportti(konfiguraatio: tila) -> merkkijono {
muoto!("Palvelin käynnissä portissa {}", config.port)
}

Kun käytät palvelinta, voit tehdä pyyntöjä palvelimelle /port portin tilan päätepiste.

Lopuksi luot palvelinesiintymän sytyttää toiminto. Lisää kokoonpanot, liitä reitit ja käynnistä palvelin:

fnpää() {
antaa config = Config { portti: 8000 };

raketti:: sytytä()
.manage (config)
.mount("/", reitit![hello_world, portti])
.tuoda markkinoille();
}

The config muuttuja on esimerkki Konfig struct. The sytyttää toiminto käynnistää palvelinesiintymän, hallita menetelmä lisää kokoonpanon palvelimeen ja kiinnitys menetelmä asentaa käsittelijätoiminnon perusreiteille. Lopuksi, tuoda markkinoille menetelmä käynnistää palvelimen kuuntelemaan määritettyä porttia.

Voit rakentaa tehokkaita verkkosovelluksia Rustissa WASM: n avulla

WebAssembly (WASM) on binäärikäskymuoto, joka on suunniteltu suoritettavaksi selaimissa ja muissa laitteissa. WASM tarjoaa matalan tason tavukoodimuodon, jota korkeamman tason ohjelmointikielet, kuten Rust, voivat käyttää käännöskohteena.

WASM: n avulla voit kääntää Rust-koodisi binäärimuotoon, jonka useimmat suosituimmat selaimet voivat suorittaa. WASM avaa mahdollisuuksien maailman kestävien verkkosovellusten rakentamiseen Rustissa, mukaan lukien täyden pinon verkkosovellukset.