Μάθετε πώς να δημιουργείτε έναν προσαρμοσμένο διακομιστή ιστού HTTP χρησιμοποιώντας είτε το πακέτο Actix της Rust είτε το πακέτο Rocket.
Το HTTP χρησιμοποιεί μια αρχιτεκτονική πελάτη-διακομιστή για πληροφορίες και μεταφορά δεδομένων. Ένα από τα χαρακτηριστικά των γλωσσών προγραμματισμού από την πλευρά του διακομιστή, όπως η Rust, είναι η ανάπτυξη διακομιστών και εφαρμογών πελατών για αλληλεπίδραση με υπηρεσίες που βασίζονται σε HTTP.
Το Rust είναι κατάλληλο για την κατασκευή διακομιστών HTTP λόγω των χαρακτηριστικών ασφάλειας, απόδοσης και αξιοπιστίας του. Τα κιβώτια τρίτων κατασκευαστών της Rust, όπως το Actix και το Rocket, είναι δημοφιλή για τη δημιουργία εξελιγμένων διακομιστών ιστού που μπορούν να διαχειριστούν υψηλή επισκεψιμότητα.
Γιατί πρέπει να χρησιμοποιήσετε το Rust για την ανάπτυξη διακομιστή Web HTTP;
Το Rust έχει κερδίσει δημοτικότητα για την ανάπτυξη διακομιστών ιστού, καθώς ορισμένα από τα χαρακτηριστικά της γλώσσας είναι ακριβώς οι απαιτήσεις για την κατασκευή των περισσότερων διακομιστών Ιστού.
Η χρήση του Rust διασφαλίζει την αποτελεσματική κλιμάκωση της εφαρμογής σας, καθιστώντας τη γλώσσα ιδανική για τη δημιουργία εφαρμογών υψηλής απόδοσης. Ακολουθούν συγκεκριμένοι λόγοι για να εξετάσετε το ενδεχόμενο χρήσης του Rust για τον διακομιστή ιστού σας και άλλες εφαρμογές διακομιστή.
Η υψηλή απόδοση του Rust
Η υψηλή απόδοση είναι ένας από τους λόγους που η Rust κάνει μια εξαιρετική επιλογή για τη δημιουργία διακομιστών ιστού HTTP. Το Rust παρέχει πρόσβαση χαμηλού επιπέδου στους πόρους του συστήματος, συμπεριλαμβανομένης της μνήμης και της CPU, επιτρέποντάς σας να γράφετε κώδικα που εκτελείται πιο γρήγορα με λιγότερους πόρους από άλλες γλώσσες του διακομιστή.
Επιπλέον, το σύστημα ιδιοκτησίας της Rust εξαλείφει την ανάγκη για συλλογή σκουπιδιών κατά τη στιγμή της μεταγλώττισης, κάτι που είναι ένας από τους λόγους για τους οποίους ορισμένες γλώσσες από την πλευρά του διακομιστή είναι αργές.
Ασφάλεια και προστασία
Το σύστημα διαχείρισης μνήμης της Rust καθιστά τη γλώσσα ασφαλή για την ανάπτυξη διακομιστή ιστού. Δεν αντιμετωπίζετε μηδενικές ή αναρτημένες αναφορές δείκτη που μπορεί να οδηγήσουν σε διαρροές μνήμης και άλλες ευπάθειες ασφαλείας.
Το σύστημα ιδιοκτησίας της Rust αποτρέπει αυτά τα κοινά σφάλματα για να διατηρείτε ασφαλή τον διακομιστή και τις εφαρμογές σας. Το Rust εστιάζει επίσης στην πρόληψη υπερχείλισης buffer και άλλων σφαλμάτων που σχετίζονται με τη μνήμη.
Συγχρονισμός
Το Concurrency είναι η δυνατότητα εκτέλεσης πολλαπλών μονάδων ενός προγράμματος με τρόπο εκτός σειράς χωρίς να επηρεάζεται η έξοδος. Η έξοδος ενός ταυτόχρονου προγράμματος θα πρέπει να είναι ίδια με την έξοδο ενός ασύγχρονου προγράμματος.
Η ταυτόχρονη χρήση μπορεί να επηρεάσει σημαντικά την απόδοση της εφαρμογής σας, καθώς οι διακομιστές πρέπει να χειρίζονται πολλά αιτήματα ταυτόχρονα. Το Rust παρέχει υποστήριξη για συνύπαρξη με ένα ελαφρύ μοντέλο σπειρώματος.
Η σάλτσα του ταυτόχρονου προγραμματισμού στο Rust είναι ότι το σύστημα ιδιοκτησίας σάς επιτρέπει να γράψετε κώδικα ασφαλή για νήμα χωρίς την ανάγκη κλειδαριών και άλλων αρχικών στοιχείων συγχρονισμού.
The Rust Standard Library και πακέτα τρίτων στο οικοσύστημα Rust παρέχουν σύγχρονα εργαλεία για αποτελεσματική ανάπτυξη διακομιστή ιστού.
Η Cargo, ο διαχειριστής πακέτων της Rust, απλοποιεί τη διαχείριση εξαρτήσεων και δημιουργεί διαδικασίες. Επιπλέον, το Rust έχει εξαιρετική υποστήριξη IDE με εργαλεία όπως το Rust Analyzer που παρέχουν απρόσκοπτη συμπλήρωση κώδικα, επισήμανση σφαλμάτων και άλλες δυνατότητες.
Επισκόπηση των βιβλιοθηκών Actix και Rocket
Η Standard Library του Rust έχει το μεγαλύτερο μέρος του βοηθητικού προγράμματος που θα χρειαστείτε για τη δημιουργία διακομιστών ιστού. Βιβλιοθήκες τρίτων όπως Ρουκέτα και Actix απλοποιήστε τη δημιουργία εφαρμογών από την πλευρά του διακομιστή με το Rust.
Actix και Ρουκέτα είναι δημοφιλή πλαίσια web Rust, αλλά οι βιβλιοθήκες διαφέρουν ως προς το σχεδιασμό και τα χαρακτηριστικά.
Το Rocket είναι ένα πλαίσιο web υψηλού επιπέδου που δίνει προτεραιότητα στην παραγωγικότητα και την ευκολία χρήσης. Το Rocket παρέχει πολλές αφαιρέσεις και συντακτικά για τη δημιουργία εφαρμογών ιστού στο Rust. Το Rocket είναι επίσης δημοφιλές για την ισχυρή πληκτρολόγηση και τον διαισθητικό σχεδιασμό του API.
Μπορείτε να προσθέσετε το Rocket ως εξάρτηση έργου στο δικό σας Cargo.toml αρχείο για να ξεκινήσετε τη δημιουργία εφαρμογών ιστού στο Rust:
[εξαρτήσεις]
ρουκέτα = "0.4.11"
Από την άλλη πλευρά, το Actix-web είναι ένα πλαίσιο χαμηλού επιπέδου που δίνει προτεραιότητα στην απόδοση και την επεκτασιμότητα. Το Actix αξιοποιεί ένα μοντέλο συγχρονισμού που βασίζεται σε ηθοποιούς και παρέχει I/O χωρίς αποκλεισμό που καθιστά το πακέτο ιδανικό για τη δημιουργία εφαρμογών ιστού με απόδοση.
Προσθέστε το Actix ως εξάρτηση έργου στο εξαρτήσεις τμήμα σας Cargo.toml αρχείο:
[εξαρτήσεις]
actix-web = "4.3.1"
Η επιλογή μιας βιβλιοθήκης για το έργο σας θα εξαρτηθεί από τις προδιαγραφές του έργου σας, τις δυνατότητες της βιβλιοθήκης και την εμπειρία σας με το Rust και το HTTP.
Δημιουργία απλού διακομιστή Web στο Rust
Αφού δημιουργήσετε ένα έργο Rust και προσθέσετε οποιοδήποτε από τα πλαίσια Rocket ή Actix στις εξαρτήσεις του έργου σας στο Cargo.toml αρχείο, είστε έτοιμοι να ξεκινήσετε τη δημιουργία ενός διακομιστή ιστού στο Rust.
Δημιουργία απλού διακομιστή Web με το Actix
Μπορείτε να χρησιμοποιήσετε ένα σειριακό πρόγραμμα για αιτήματα κατά τη δημιουργία υπηρεσιών web στο Rust.
Το Serde είναι μια δημοφιλής βιβλιοθήκη Rust για σειριοποίηση και αποσειριοποίηση δεδομένων μεταξύ τύπων Rust και μορφών δεδομένων όπως JSON, YAML και TOML. Το Serde παρέχει ένα πλαίσιο για τον ορισμό της μετατροπής δεδομένων μεταξύ δομών δεδομένων Rust και αντίστοιχων αναπαραστάσεων σε άλλες μορφές δεδομένων.
Ακολουθεί η οδηγία για την προσθήκη του Serde ως πακέτου τρίτου μέρους για το έργο σας.
[εξαρτήσεις]
serde = { έκδοση = "1.0.159", χαρακτηριστικά = ["αντλώ"] }
Αφού προσθέσετε το Serde και το Actix ως εξαρτήσεις έργου, μπορείτε να δημιουργήσετε έναν βασικό διακομιστή ιστού με το Rust. Δείτε πώς μπορείτε να ρυθμίσετε ένα απλό Γειά σου Κόσμε! διακομιστής web που γράφει μια συμβολοσειρά στον πελάτη με το Actix:
Αρχικά, εισαγάγετε τις απαραίτητες μονάδες και τύπους από το actix_web και serde κιβώτια:
χρήση actix_web::{get, web, App, HttpResponse, HttpServer, Responder};
χρήση serde::{Deserialize, Serialize};
θα χρησιμοποιήσετε serde για να σειριοποιήσετε ένα μήνυμα στον πελάτη με μια δομή. Ο Serde θα μετατρέψει τη δομή σε JSON για τον πελάτη. Εδώ είναι η δομή για το μήνυμα:
#[παραγωγή (Εντοπισμός σφαλμάτων, Σειριακή, Αποσειροποίηση)]
structΜήνυμα {
μήνυμα: Σειρά,
}
Τώρα μπορείτε να ορίσετε τη συνάρτηση χειριστή για το τελικό σημείο. Στην κορυφή της λειτουργίας χειριστή, μπορείτε να προσθέσετε διακοσμητές για προσαρμοσμένες συμπεριφορές:
#[παίρνω("/")]
ασυγχρονισμόςστΓειά σου() -> υπονοώ Απάντηση {
HttpResponse::Εντάξει().json (Μήνυμα {
μήνυμα: "Γειά σου Κόσμε!".to_owned(),
})
}
ο Γειά σου Η λειτουργία χειριστή χειρίζεται αιτήματα GET. Η συνάρτηση επιστρέφει έναν τύπο που υλοποιεί το Ανταποκριτής γνώρισμα από το Actix πακέτο.
ο json μέθοδος του HttpResponse:: Ok() ο τύπος παίρνει σε μια περίπτωση δομής που Serde χειρίζεται κάτω από την κουκούλα και επιστρέφει την απάντηση στον πελάτη.
Αφού ορίσετε το τελικό σημείο, μπορείτε να ξεκινήσετε μια παρουσία διακομιστή και να προσαρτήσετε το τελικό σημείο σε μια διαδρομή.
#[actix_web:: main]
ασυγχρονισμόςστκύριος() -> std:: io::Αποτέλεσμα {
HttpServer:: new(|| App:: new().service (γεια))
.δένω("127.0.0.1:8080")?
.τρέξιμο()
.αναμένω
}
ο HttpServer:: νέος η λειτουργία είναι μια νέα παρουσία διακομιστή. ο κύριος ξεκινά η λειτουργία και ο διακομιστής προσαρτά το Γειά σου λειτουργία χειριστή με τη νέα παρουσία εφαρμογής. ο δένω μέθοδος δεσμεύει τον διακομιστή με την καθορισμένη διεύθυνση URL και το τρέξιμο λειτουργία εκτελεί τον διακομιστή.
Δημιουργία απλού διακομιστή Web με το Rocket
Το Rocket είναι μινιμαλιστικό, επομένως μπορείτε να ρυθμίσετε έναν απλό διακομιστή ιστού χωρίς άλλες εξαρτήσεις εκτός από τον Ρουκέτα σακαράκα.
Δείτε πώς μπορείτε να ρυθμίσετε έναν απλό διακομιστή με ένα Γειά σου Κόσμε! τελικό σημείο χρησιμοποιώντας το Rocket:
Αρχικά, εισαγάγετε τις απαραίτητες εξαρτήσεις για τον διακομιστή σας.
#![χαρακτηριστικό (proc_macro_hygiene, decl_macro)]
#[macro_use]
εξωτερικόσακαράκα ρουκέτα;
// εισαγωγές από το κιβώτιο πυραύλων
χρήση πυραύλων:: απάντηση:: περιεχόμενο;
χρήση πύραυλος:: Πολιτεία;
ο #![χαρακτηριστικό (proc_macro_hygiene, decl_macro)] Το χαρακτηριστικό ενεργοποιεί τις πειραματικές λειτουργίες Rust για το πλαίσιο Rocket. ο #[macro_use] χαρακτηριστικό εισαγωγές μακροεντολών από το ρουκέτα μονάδα μέτρησης.
Ακολουθεί μια συνάρτηση χειριστή που εξυπηρετεί HTML κατόπιν αιτήματος:
#[παίρνω("/")]
στΓειά σου Κόσμε() -> περιεχόμενο:: Html'στατικόςstr> {
περιεχόμενο:: Html("Γειά σου Κόσμε!
")
}
ο Γειά σου Κόσμε Η συνάρτηση επιστρέφει μια στατική συμβολοσειρά HTML με το περιεχόμενο:: Html λειτουργία.
Ακολουθεί μια δήλωση δομής διαμόρφωσης για τον διακομιστή (σύμβαση πλαισίου Rocket):
structΔιαμόρφωση {
Λιμάνι: u16,
}
#[παίρνω("/Λιμάνι")]
στΛιμάνι(διαμόρφωση: Κατάσταση) -> Σειρά {
μορφή!("Διακομιστής που εκτελείται στη θύρα {}", config.port)
}
Όταν εκτελείτε τον διακομιστή, μπορείτε να κάνετε αιτήματα στο /port τελικό σημείο για την κατάσταση της θύρας.
Τέλος, θα δημιουργήσετε μια παρουσία διακομιστή με το ανάβω λειτουργία. Προσθέστε τις διαμορφώσεις, προσαρτήστε τις διαδρομές και ξεκινήστε τον διακομιστή:
στκύριος() {
αφήνω config = Config { port: 8000 };
rocket:: ignite()
.manage (config)
.βουνό("/", διαδρομές![hello_world, port])
.εκτόξευση();
}
ο config η μεταβλητή είναι ένα παράδειγμα του Διαμόρφωση struct. ο ανάβω η συνάρτηση ξεκινά μια παρουσία διακομιστή, το διαχειρίζονται μέθοδος προσθέτει τη διαμόρφωση στον διακομιστή και το βουνό μέθοδος προσαρτά τη λειτουργία χειριστή στις βασικές διαδρομές. Τέλος, το εκτόξευση μέθοδος εκκινεί τον διακομιστή για ακρόαση στην καθορισμένη θύρα.
Μπορείτε να δημιουργήσετε ισχυρές εφαρμογές Ιστού σε Rust με το WASM
Το WebAssembly (WASM) είναι μια δυαδική μορφή εντολών που έχει σχεδιαστεί για εκτέλεση σε προγράμματα περιήγησης και άλλες συσκευές. Το WASM παρέχει μια μορφή bytecode χαμηλού επιπέδου που μπορούν να χρησιμοποιήσουν οι γλώσσες προγραμματισμού υψηλότερου επιπέδου όπως η Rust ως στόχο μεταγλώττισης.
Με το WASM, μπορείτε να μεταγλωττίσετε τον κώδικα Rust σε μια δυαδική μορφή που μπορούν να εκτελέσουν τα περισσότερα δημοφιλή προγράμματα περιήγησης. Το WASM ανοίγει έναν κόσμο δυνατοτήτων για τη δημιουργία ισχυρών εφαρμογών ιστού στο Rust, συμπεριλαμβανομένων εφαρμογών web πλήρους στοίβας.