HTTP sử dụng kiến trúc máy khách-máy chủ để truyền thông tin và dữ liệu. Một trong những tính năng của ngôn ngữ lập trình phía máy chủ như Rust là phát triển máy chủ và ứng dụng khách để tương tác với các dịch vụ dựa trên HTTP.
Rust phù hợp để xây dựng các máy chủ HTTP nhờ các tính năng an toàn, hiệu suất và độ tin cậy của nó. Các thùng bên thứ ba của Rust như Actix và Rocket rất phổ biến để xây dựng các máy chủ web phức tạp có thể xử lý lưu lượng truy cập cao.
Tại sao bạn nên sử dụng Rust để phát triển máy chủ web HTTP?
Rust đã trở nên phổ biến để phát triển máy chủ web vì một số tính năng của ngôn ngữ chính xác là yêu cầu để xây dựng hầu hết các máy chủ web.
Sử dụng Rust đảm bảo ứng dụng của bạn mở rộng quy mô một cách hiệu quả, làm cho ngôn ngữ này trở nên lý tưởng để xây dựng các ứng dụng hiệu suất cao. Dưới đây là những lý do cụ thể để cân nhắc sử dụng Rust cho máy chủ web của bạn và các ứng dụng phía máy chủ khác.
Hiệu suất cao của Rust
Hiệu suất cao là một trong những lý do khiến Rust trở thành lựa chọn tuyệt vời để xây dựng các máy chủ web HTTP. Rust cung cấp quyền truy cập cấp thấp vào tài nguyên hệ thống, bao gồm cả bộ nhớ và CPU, cho phép bạn viết mã chạy nhanh hơn với ít tài nguyên hơn so với các ngôn ngữ phía máy chủ khác.
Ngoài ra, hệ thống sở hữu của Rust loại bỏ nhu cầu thu gom rác tại thời điểm biên dịch, đây là một trong những lý do khiến một số ngôn ngữ phía máy chủ bị chậm.
An toàn và bảo mật
Hệ thống quản lý bộ nhớ sở hữu của Rust làm cho ngôn ngữ trở nên an toàn để phát triển máy chủ web. Bạn không gặp phải các tham chiếu con trỏ rỗng hoặc lơ lửng có thể dẫn đến rò rỉ bộ nhớ và các lỗ hổng bảo mật khác.
Hệ thống sở hữu của Rust ngăn chặn các lỗi phổ biến này để giữ an toàn cho máy chủ và ứng dụng của bạn. Rust cũng tập trung vào việc ngăn ngừa tràn bộ đệm và các lỗi khác liên quan đến bộ nhớ.
đồng thời
Đồng thời là khả năng chạy nhiều đơn vị của chương trình theo cách không theo thứ tự mà không ảnh hưởng đến đầu ra. Đầu ra của chương trình đồng thời phải giống với đầu ra của chương trình không đồng bộ.
Đồng thời có thể ảnh hưởng đáng kể đến hiệu suất ứng dụng của bạn do máy chủ cần xử lý đồng thời nhiều yêu cầu. Rust cung cấp hỗ trợ để cùng tồn tại với mô hình phân luồng nhẹ.
Điểm nổi bật của lập trình đồng thời trong Rust là hệ thống sở hữu cho phép bạn viết mã an toàn theo luồng mà không cần khóa và các nguyên tắc đồng bộ hóa khác.
Rust cung cấp dụng cụ hiện đại
Thư viện tiêu chuẩn Rust và các gói của bên thứ ba trong hệ sinh thái Rust cung cấp công cụ hiện đại để phát triển máy chủ web hiệu quả.
Cargo, trình quản lý gói của Rust, đơn giản hóa việc quản lý phụ thuộc và xây dựng các quy trình. Ngoài ra, Rust có hỗ trợ IDE tuyệt vời với các công cụ như Rust Analyzer cung cấp khả năng hoàn thành mã liền mạch, đánh dấu lỗi và các tính năng khác.
Tổng quan về Thư viện Actix và Rocket
Thư viện tiêu chuẩn của Rust có hầu hết các tiện ích mà bạn sẽ cần để xây dựng các máy chủ web. Thư viện của bên thứ ba như tên lửa Và Actix đơn giản hóa việc xây dựng các ứng dụng phía máy chủ với Rust.
Actix Và tên lửa là các khung web Rust phổ biến, nhưng các thư viện khác nhau về thiết kế và tính năng.
Rocket là một khung web cấp cao ưu tiên năng suất và tính dễ sử dụng. Rocket cung cấp rất nhiều trừu tượng và đường cú pháp để xây dựng các ứng dụng web trong Rust. Rocket cũng nổi tiếng nhờ khả năng gõ mạnh và thiết kế API trực quan.
Bạn có thể thêm Rocket làm phụ thuộc dự án trong Cargo.toml tệp để bắt đầu xây dựng ứng dụng web trong Rust:
[dependencies]
rocket = "0.4.11"
Mặt khác, Actix-web là một khung cấp thấp ưu tiên hiệu suất và khả năng mở rộng. Actix tận dụng mô hình đồng thời dựa trên diễn viên và cung cấp I/O không chặn, làm cho gói trở nên lý tưởng để xây dựng các ứng dụng web hoạt động hiệu quả.
Thêm Actix làm phụ thuộc dự án trong phụ thuộc phần của bạn Cargo.toml tài liệu:
[dependencies]
actix-web = "4.3.1"
Việc chọn thư viện cho dự án của bạn sẽ phụ thuộc vào thông số kỹ thuật của dự án, các tính năng của thư viện và trải nghiệm của bạn với Rust và HTTP.
Xây dựng một máy chủ web đơn giản trong Rust
Sau khi tạo dự án Rust và thêm bất kỳ khung Rocket hoặc Actix nào vào phần phụ thuộc của dự án trong Cargo.toml tệp, bạn đã sẵn sàng bắt đầu xây dựng máy chủ web trong Rust.
Xây dựng một máy chủ web đơn giản với Actix
Bạn có thể sử dụng bộ nối tiếp cho các yêu cầu khi xây dựng dịch vụ web trong Rust.
Serde là một thư viện Rust phổ biến để tuần tự hóa và giải tuần tự hóa dữ liệu giữa các loại Rust và định dạng dữ liệu như JSON, YAML và TOML. Serde cung cấp một khung để xác định chuyển đổi dữ liệu giữa các cấu trúc dữ liệu Rust và các biểu diễn tương ứng ở các định dạng dữ liệu khác.
Đây là hướng dẫn để thêm Serde làm gói của bên thứ ba cho dự án của bạn.
[dependencies]
serde = { version = "1.0.159" , features = ["derive"] }
Khi bạn đã thêm Serde và Actix làm phần phụ thuộc của dự án, bạn có thể tạo một máy chủ web cơ bản với Rust. Đây là cách bạn có thể thiết lập một Chào thế giới! máy chủ web ghi một chuỗi cho máy khách bằng Actix:
Đầu tiên, nhập các mô-đun và loại cần thiết từ actix_web Và người chăn bò thùng:
use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};
use serde::{Deserialize, Serialize};
bạn sẽ sử dụng người chăn bò để tuần tự hóa một tin nhắn đến máy khách bằng một cấu trúc. Serde sẽ chuyển đổi cấu trúc thành JSON cho máy khách. Đây là cấu trúc cho tin nhắn:
#[derive(Debug, Serialize, Deserialize)]
struct Message {
message: String,
}
Bây giờ bạn có thể xác định chức năng xử lý cho điểm cuối. Ở đầu hàm xử lý, bạn có thể thêm các trình trang trí cho các hành vi tùy chỉnh:
#[get("https://www.makeuseof.com/")]
async fn hello() -> impl Responder {
HttpResponse::Ok().json(Message {
message: "Hello, World!".to_owned(),
})
}
Các Xin chào chức năng xử lý xử lý các yêu cầu GET. Hàm trả về một loại thực hiện người trả lời đặc điểm từ Actix bưu kiện.
Các json phương pháp của HttpResponse::Ok() type lấy trong một thể hiện cấu trúc bánh mì xử lý dưới mui xe và trả lại phản hồi cho khách hàng.
Sau khi xác định điểm cuối, bạn có thể bắt đầu một phiên bản máy chủ và gắn điểm cuối trên một tuyến đường.
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(hello))
.bind("127.0.0.1:8080")?
.run()
.await
}
Các Máy chủ http::mới chức năng là một phiên bản máy chủ mới. Các chủ yếu chức năng bắt đầu và máy chủ gắn kết Xin chào chức năng xử lý với phiên bản ứng dụng mới. Các trói buộc phương thức liên kết máy chủ với URL đã chỉ định và chạy chức năng chạy máy chủ.
Xây dựng một máy chủ web đơn giản với Rocket
Rocket tối giản, vì vậy bạn có thể thiết lập một máy chủ web đơn giản mà không cần bất kỳ phụ thuộc nào ngoài tên lửa cái thùng.
Đây là cách thiết lập một máy chủ đơn giản với một Chào thế giới! điểm cuối sử dụng Rocket:
Đầu tiên, nhập các phụ thuộc cần thiết cho máy chủ của bạn.
#![feature(proc_macro_hygiene, decl_macro)]#[macro_use]
extern crate rocket;
use rocket::response::content;
use rocket::State;
Các #![feature(proc_macro_hygiene, decl_macro)] thuộc tính bật các tính năng thử nghiệm Rust cho khung Rocket. Các #[macro_use] thuộc tính nhập macro từ tên lửa mô-đun.
Đây là một chức năng xử lý phục vụ HTML theo yêu cầu:
#[get("https://www.makeuseof.com/")]
fn hello_world() -> content::Html<&'static str> {
content::Html("<h1>Hello, world!</h1>")
}
Các Chào thế giới hàm trả về một chuỗi tĩnh HTML với nội dung::Html chức năng.
Đây là một khai báo cấu trúc cấu hình cho máy chủ (Quy ước khung tên lửa):
struct Config {
port: u16,
}#[get("/port")]
fn port(config: State<Config>) -> String {
format!("Server running on port {}", config.port)
}
Khi bạn chạy máy chủ, bạn có thể yêu cầu /Hải cảng điểm cuối cho trạng thái cổng.
Cuối cùng, bạn sẽ tạo một phiên bản máy chủ với đánh lửa chức năng. Thêm các cấu hình, gắn kết các tuyến và khởi chạy máy chủ:
fn main() {
let config = Config { port: 8000 }; rocket::ignite()
.manage(config)
.mount("https://www.makeuseof.com/", routes![hello_world, port])
.launch();
}
Các cấu hình biến là một thể hiện của cấu hình cấu trúc. Các đánh lửa bắt đầu một phiên bản máy chủ, quản lý phương thức thêm cấu hình vào máy chủ và gắn kết phương thức gắn kết chức năng xử lý trên các tuyến cơ sở. cuối cùng phóng khởi chạy máy chủ để lắng nghe trên cổng được chỉ định.
Bạn có thể xây dựng các ứng dụng web mạnh mẽ trong Rust với WASM
WebAssembly (WASM) là một định dạng lệnh nhị phân được thiết kế để thực thi trên trình duyệt và các thiết bị khác. WASM cung cấp định dạng mã byte cấp thấp mà các ngôn ngữ lập trình cấp cao hơn như Rust có thể sử dụng làm mục tiêu biên dịch.
Với WASM, bạn có thể biên dịch mã Rust của mình sang định dạng nhị phân mà hầu hết các trình duyệt phổ biến đều có thể thực thi. WASM mở ra một thế giới khả năng để xây dựng các ứng dụng web mạnh mẽ trong Rust, bao gồm cả các ứng dụng web đầy đủ.