Rust'ın Actix veya Rocket paketini kullanarak özel bir HTTP web sunucusunu nasıl oluşturacağınızı öğrenin.
HTTP, bilgi ve veri aktarımı için bir istemci-sunucu mimarisi kullanır. Rust gibi sunucu tarafı programlama dillerinin özelliklerinden biri, HTTP tabanlı hizmetlerle etkileşim için sunucular ve istemci uygulamaları geliştirmektir.
Rust, güvenlik, performans ve güvenilirlik özellikleri sayesinde HTTP sunucuları oluşturmak için uygundur. Rust'ın Actix ve Rocket gibi üçüncü taraf kasaları, yüksek trafiği kaldırabilecek gelişmiş web sunucuları oluşturmak için popülerdir.
HTTP Web Sunucusu Geliştirmek İçin Neden Rust Kullanmalısınız?
Rust, dilin bazı özellikleri tam olarak çoğu web sunucusunu oluşturmak için gereksinimler olduğundan, web sunucusu geliştirme için popülerlik kazandı.
Rust'ı kullanmak, uygulamanızın verimli bir şekilde ölçeklenmesini sağlayarak dili yüksek performanslı uygulamalar oluşturmak için ideal hale getirir. Burada, web sunucunuz ve diğer sunucu tarafı uygulamalarınız için Rust kullanmayı düşünmeniz için belirli nedenler bulunmaktadır.
Rust'ın Yüksek Performansı
Yüksek performans, Rust'ın HTTP web sunucuları oluşturmak için mükemmel bir seçim olmasının nedenlerinden biridir. Rust, bellek ve CPU dahil olmak üzere sistem kaynaklarına düşük düzeyde erişim sağlayarak, diğer sunucu tarafı dillerinden daha az kaynakla daha hızlı çalışan kod yazmanıza olanak tanır.
Ek olarak, Rust'ın sahiplik sistemi, bazı sunucu tarafı dillerinin yavaş olmasının nedenlerinden biri olan derleme zamanında çöp toplama ihtiyacını ortadan kaldırır.
Emniyet ve güvenlik
Rust'ın bellek yönetimi sahiplik sistemi, dili web sunucusu geliştirme için güvenli hale getirir. Bellek sızıntılarına ve diğer güvenlik açıklarına yol açabilecek boş veya sarkan işaretçi referanslarıyla karşılaşmazsınız.
Rust'ın sahiplik sistemi sunucunuzu ve uygulamalarınızı güvende tutmak için bu yaygın hataları önler. Rust ayrıca arabellek taşmalarını ve bellekle ilgili diğer hataları önlemeye de odaklanır.
eşzamanlılık
Eşzamanlılık, bir programın birden çok birimini çıktıyı etkilemeden sıra dışı bir şekilde çalıştırma yeteneğidir. Eşzamanlı bir programın çıktısı, eşzamansız bir programın çıktısıyla aynı olmalıdır.
Sunucuların aynı anda birden çok isteği işlemesi gerektiğinden, eşzamanlılık uygulamanızın performansını önemli ölçüde etkileyebilir. Rust, hafif bir diş açma modeliyle bir arada bulunma desteği sağlar.
Rust'ta eşzamanlı programlamanın sosu, sahiplik sisteminin kilitlere ve diğer senkronizasyon ilkelerine ihtiyaç duymadan iş parçacığı güvenli kod yazmanıza izin vermesidir.
Rust Standart Kitaplığı ve Rust ekosistemindeki üçüncü taraf paketleri etkili için modern araçlar sağlamak web sunucusu geliştirme.
Rust'ın paket yöneticisi Cargo, bağımlılık yönetimini basitleştirir ve süreçler oluşturur. Ek olarak Rust, sorunsuz kod tamamlama, hata vurgulama ve diğer özellikler sağlayan Rust Analyzer gibi araçlarla mükemmel IDE desteğine sahiptir.
Actix ve Rocket Kitaplıklarına Genel Bakış
Rust'ın Standart Kitaplığı, web sunucuları oluşturmak için ihtiyaç duyacağınız çoğu yardımcı programa sahiptir. Üçüncü taraf kitaplıkları gibi Roket Ve Actix Rust ile sunucu taraflı uygulamalar oluşturmayı basitleştirin.
Actix Ve Roket popüler Rust web çerçeveleridir, ancak kitaplıklar tasarım ve özellikler açısından farklılık gösterir.
Rocket, üretkenliği ve kullanım kolaylığını ön planda tutan üst düzey bir web çerçevesidir. Rocket, Rust'ta web uygulamaları oluşturmak için birçok soyutlama ve sözdizimi şekeri sağlar. Rocket, güçlü yazma ve sezgisel API tasarımıyla da popülerdir.
Rocket'i projenize bir bağımlılık olarak ekleyebilirsiniz. Kargo.toml Rust'ta web uygulamaları oluşturmaya başlamak için dosya:
[bağımlılıklar]
roket = "0.4.11"
Actix-web ise performans ve ölçeklenebilirliğe öncelik veren düşük seviyeli bir çerçevedir. Actix, aktör tabanlı bir eşzamanlılık modelinden yararlanır ve performansı yüksek web uygulamaları oluşturmak için paketi ideal hale getiren bloke olmayan G/Ç sağlar.
Actix'i bir proje bağımlılığı olarak ekleyin. bağımlılıklar senin bölümün Kargo.toml dosya:
[bağımlılıklar]
actix-web = "4.3.1"
Projeniz için bir kitaplık seçmek, projenizin özelliklerine, kitaplığın özelliklerine ve Rust ve HTTP deneyiminize bağlı olacaktır.
Rust'ta Basit Bir Web Sunucusu Oluşturma
Bir Rust projesi oluşturduktan ve Rocket veya Actix çerçevelerinden herhangi birini projenizin bağımlılıklarına ekledikten sonra, Kargo.toml dosya, Rust'ta bir web sunucusu oluşturmaya hazırsınız.
Actix ile Basit Bir Web Sunucusu Oluşturma
Rust'ta web hizmetleri oluştururken istekler için bir seri hale getirici kullanabilirsiniz.
Serde, Rust türleri ve JSON, YAML ve TOML gibi veri biçimleri arasında serileştirme ve seri durumdan çıkarma için popüler bir Rust kitaplığıdır. Serde, Rust veri yapıları ile diğer veri formatlarındaki karşılık gelen temsiller arasında veri dönüşümünü tanımlamak için bir çerçeve sağlar.
Serde'yi projeniz için bir üçüncü taraf paketi olarak eklemek için direktif burada.
[bağımlılıklar]
serde = { sürüm = "1.0.159", özellikler = ["türetmek"] }
Serde ve Actix'i proje bağımlılıkları olarak ekledikten sonra, Rust ile temel bir web sunucusu oluşturabilirsiniz. Basit bir ayarı şu şekilde yapabilirsiniz: Selam Dünya! Actix ile istemciye bir dizi yazan web sunucusu:
İlk olarak, gerekli modülleri ve türleri sistemden içe aktarın. actix_web Ve serde kasalar:
kullanmak actix_web::{get, web, Uygulama, HttpResponse, HttpServer, Responder};
kullanmak serde::{Serialize, Serialize};
kullanacaksın serde bir yapı ile müşteriye bir mesaj seri hale getirmek için. Serde, istemci için yapıyı JSON'a dönüştürecektir. İşte mesajın yapısı:
#[türet (Debug, Serialize, Serialize)]
yapıİleti {
İleti: Sicim,
}
Artık uç nokta için işleyici işlevini tanımlayabilirsiniz. İşleyici işlevinizin en üstünde, özel davranışlar için dekoratörler ekleyebilirsiniz:
#[elde etmek("/")]
zaman uyumsuzfnMerhaba() -> ima yanıtlayan {
HttpResponse::Tamam().json (Mesaj {
İleti: "Selam Dünya!".to_wed(),
})
}
bu Merhaba işleyici işlevi GET isteklerini işler. İşlev, şunu uygulayan bir tür döndürür: yanıtlayıcı gelen özellik Actix paket.
bu json yöntemi HttpResponse:: Tamam() type, bir yapı örneği alır ki Serde başlığın altında işler ve müşteriye yanıtı döndürür.
Uç noktayı tanımladıktan sonra, bir sunucu örneği başlatabilir ve uç noktayı bir rotaya bağlayabilirsiniz.
#[actix_web:: ana]
zaman uyumsuzfnana() -> std:: io::Sonuç {
HttpServer:: new(|| App:: new().service (merhaba))
.bağlama("127.0.0.1:8080")?
.koşmak()
.beklemek
}
bu Http Sunucusu:: yeni işlev yeni bir sunucu örneğidir. bu ana işlev başlar ve sunucu Merhaba yeni uygulama örneği ile işleyici işlevi. bu bağlamak yöntemi, sunucuyu belirtilen URL'ye bağlar ve koşmak işlev sunucuyu çalıştırır.
Rocket İle Basit Bir Web Sunucusu Kurmak
Rocket minimalisttir, bu nedenle basit bir web sunucusunu herhangi bir bağımlılık olmadan kurabilirsiniz. Roket sandık.
ile basit bir sunucunun nasıl kurulacağı aşağıda açıklanmıştır. Selam Dünya! Roket kullanarak uç nokta:
Öncelikle, sunucunuz için gerekli bağımlılıkları içe aktarın.
#![özellik (proc_macro_hygiene, dekl_macro)]
#[makro_kullanım]
dışsandık roket;
// Roket kutusundan içe aktarma
kullanmak roket:: yanıt:: içerik;
kullanmak roket:: Durum;
bu #![özellik (proc_macro_hygiene, dekl_macro)] niteliği, Roket çerçevesi için Rust deneysel özelliklerini etkinleştirir. bu #[makro_kullanım] öznitelik, makroları roket modül.
İşte istek üzerine HTML sunan bir işleyici işlevi:
#[elde etmek("/")]
fnSelam Dünya() -> içerik:: Html'statikstr> {
içerik:: Html("Selam Dünya!
")
}
bu Selam Dünya işlev, bir HTML statik dizesi döndürür. içerik:: Html işlev.
İşte sunucu için bir yapılandırma yapı bildirimi (Rocket çerçeve kuralı):
yapıYapılandırma {
liman: u16,
}
#[elde etmek("/liman")]
fnliman(yapılandırma: Durum) -> Sicim {
biçim!("{} bağlantı noktasında çalışan sunucu", yapılandırma.bağlantı noktası)
}
Sunucuyu çalıştırdığınızda, sunucuya istekte bulunabilirsiniz. /port bağlantı noktası durumu için uç nokta.
Son olarak, ile bir sunucu örneği oluşturacaksınız. tutuşturmak işlev. Konfigürasyonları ekleyin, yolları bağlayın ve sunucuyu başlatın:
fnana() {
izin vermek yapılandırma = Yapılandırma { bağlantı noktası: 8000 };
roket:: ateşle()
.yönet (yapılandırma)
.bağ("/", rotalar![merhaba_dünya, bağlantı noktası])
.öğle yemeği();
}
bu yapılandırma değişken, örneğinin bir örneğidir Yapılandırma yapı bu tutuşturmak işlevi bir sunucu örneğini başlatır, üstesinden gelmek yöntemi, yapılandırmayı sunucuya ekler ve binmek yöntem, işleyici işlevini temel yollara bağlar. Son olarak, öğle yemeği yöntem belirtilen bağlantı noktasında dinlemek için sunucuyu başlatır.
WASM ile Rust'ta Güçlü Web Uygulamaları Oluşturabilirsiniz
WebAssembly (WASM), tarayıcılarda ve diğer cihazlarda yürütme için tasarlanmış bir ikili yönerge biçimidir. WASM, Rust gibi daha yüksek seviyeli programlama dillerinin derleme hedefi olarak kullanabileceği düşük seviyeli bir bayt kodu formatı sağlar.
WASM ile, Rust kodunuzu en popüler tarayıcıların çalıştırabileceği bir ikili biçimde derleyebilirsiniz. WASM, tam yığın web uygulamaları da dahil olmak üzere Rust'ta sağlam web uygulamaları oluşturmak için bir olasılıklar dünyasının kapılarını aralıyor.