زنگ میں ایک بنیادی HTTP ویب سرور کیسے بنایا جائے۔

زنگ میں ایک بنیادی HTTP ویب سرور کیسے بنایا جائے۔
آپ جیسے قارئین MUO کو سپورٹ کرنے میں مدد کرتے ہیں۔ جب آپ ہماری سائٹ پر لنکس کا استعمال کرتے ہوئے خریداری کرتے ہیں، تو ہم ملحق کمیشن حاصل کر سکتے ہیں۔ مزید پڑھ.

HTTP معلومات اور ڈیٹا کی منتقلی کے لیے کلائنٹ-سرور کے فن تعمیر کا استعمال کرتا ہے۔ سرور سائیڈ پروگرامنگ زبانوں کی خصوصیات میں سے ایک جیسے Rust HTTP پر مبنی خدمات کے ساتھ تعامل کے لیے سرورز اور کلائنٹ ایپس تیار کرنا ہے۔





مورچا اپنی حفاظت، کارکردگی اور قابل اعتماد خصوصیات کی وجہ سے HTTP سرورز بنانے کے لیے موزوں ہے۔ Rust کے تھرڈ پارٹی کریٹس جیسے Actix اور Rocket جدید ترین ویب سرورز بنانے کے لیے مشہور ہیں جو زیادہ ٹریفک کو سنبھال سکتے ہیں۔





دن کی ویڈیو کا میک یوز مواد کے ساتھ جاری رکھنے کے لیے اسکرول کریں۔

آپ کو HTTP ویب سرور ڈویلپمنٹ کے لئے مورچا کیوں استعمال کرنا چاہئے؟

زنگ نے ویب سرور کی ترقی کے لئے مقبولیت حاصل کی ہے کیونکہ زبان کی کچھ خصوصیات بالکل ویب سرورز بنانے کے تقاضے ہیں۔





Rust کا استعمال یقینی بناتا ہے کہ آپ کی ایپلیکیشن کی ترازو مؤثر طریقے سے ہوتی ہے، جو زبان کو اعلیٰ کارکردگی والے ایپس بنانے کے لیے مثالی بناتی ہے۔ آپ کے ویب سرور اور دیگر سرور سائیڈ ایپلی کیشنز کے لیے Rust استعمال کرنے پر غور کرنے کی مخصوص وجوہات یہ ہیں۔

میرا آئی فون ٹیکسٹ پیغامات کیوں نہیں بھیج رہا ہے؟

زنگ کی اعلی کارکردگی

اعلی کارکردگی ایک وجہ ہے کہ زنگ HTTP ویب سرورز کی تعمیر کے لیے بہترین انتخاب کرتا ہے۔ رسٹ سسٹم کے وسائل تک نچلی سطح تک رسائی فراہم کرتا ہے، بشمول میموری اور سی پی یو، آپ کو کوڈ لکھنے کے قابل بناتا ہے جو سرور کی دوسری زبانوں کے مقابلے کم وسائل کے ساتھ تیزی سے چلتا ہے۔



مزید برآں، زنگ کا ملکیتی نظام کمپائل کے وقت کوڑا کرکٹ جمع کرنے کی ضرورت کو ختم کرتا ہے، جو کچھ سرور سائیڈ زبانوں کے سست ہونے کی ایک وجہ ہے۔

حفاظت اور سلامتی

میموری مینجمنٹ کا مورچا کا ملکیتی نظام زبان کو ویب سرور کی ترقی کے لیے محفوظ بناتا ہے۔ آپ کو کالعدم یا لٹکتے ہوئے پوائنٹر حوالہ جات کا تجربہ نہیں ہے جو میموری لیک اور دیگر حفاظتی خطرات کا باعث بن سکتے ہیں۔





زنگ کی ملکیت کا نظام آپ کے سرور اور ایپس کو محفوظ رکھنے کے لیے ان عام غلطیوں کو روکتا ہے۔ زنگ بفر اوور فلو اور میموری سے متعلق دیگر غلطیوں کو روکنے پر بھی توجہ مرکوز کرتا ہے۔

ہم آہنگی

کنکرنسی آؤٹ پٹ کو متاثر کیے بغیر کسی پروگرام کے متعدد یونٹوں کو آؤٹ آف آرڈر انداز میں چلانے کی صلاحیت ہے۔ کنکرنٹ پروگرام کا آؤٹ پٹ ایک غیر مطابقت پذیر پروگرام کے آؤٹ پٹ جیسا ہونا چاہیے۔





ہم آہنگی آپ کی درخواست کی کارکردگی کو نمایاں طور پر متاثر کر سکتی ہے کیونکہ سرورز کو ایک ساتھ متعدد درخواستوں کو ہینڈل کرنے کی ضرورت ہوتی ہے۔ زنگ ہلکے وزن کے تھریڈنگ ماڈل کے ساتھ بقائے باہمی کے لیے معاونت فراہم کرتا ہے۔

زنگ میں ہم آہنگی پروگرامنگ کی چٹنی یہ ہے کہ ملکیت کا نظام آپ کو تالے اور دیگر مطابقت پذیری کے قدیم چیزوں کی ضرورت کے بغیر تھریڈ سیف کوڈ لکھنے کی اجازت دیتا ہے۔

زنگ جدید ٹولنگ فراہم کرتا ہے۔

مورچا معیاری لائبریری اور مورچا ماحولیاتی نظام میں تھرڈ پارٹی پیکجز موثر کے لیے جدید ٹولنگ فراہم کریں۔ ویب سرور کی ترقی .

کارگو، رسٹ کا پیکیج مینیجر، انحصار کے انتظام کو آسان بناتا ہے اور عمل کو تیار کرتا ہے۔ مزید برآں، Rust میں Rust Analyzer جیسے ٹولز کے ساتھ بہترین IDE سپورٹ ہے جو بغیر کسی رکاوٹ کے کوڈ کی تکمیل، غلطی کو نمایاں کرنے اور دیگر خصوصیات فراہم کرتے ہیں۔

ایکٹکس اور راکٹ لائبریریوں کا جائزہ

Rust's Standard Library میں زیادہ تر افادیت ہے جو آپ کو ویب سرور بنانے کے لیے درکار ہوگی۔ تیسری پارٹی کی لائبریریاں جیسے راکٹ اور ایکٹکس زنگ کے ساتھ سرور سائیڈ ایپلی کیشنز کی تعمیر کو آسان بنائیں۔

ایکٹکس اور راکٹ مقبول رسٹ ویب فریم ورک ہیں، لیکن لائبریریاں ڈیزائن اور خصوصیات میں مختلف ہیں۔

راکٹ ایک اعلیٰ سطحی ویب فریم ورک ہے جو پیداواری صلاحیت اور استعمال میں آسانی کو ترجیح دیتا ہے۔ راکٹ زنگ میں ویب ایپس بنانے کے لیے بہت ساری تجرید اور نحوی شوگر فراہم کرتا ہے۔ راکٹ اپنی مضبوط ٹائپنگ اور بدیہی API ڈیزائن کے لیے بھی مشہور ہے۔

آپ راکٹ کو بطور پروجیکٹ انحصار میں شامل کرسکتے ہیں۔ charge.toml Rust میں ویب ایپس بنانا شروع کرنے کے لیے فائل:

 [dependencies] 
rocket = "0.4.11"

دوسری طرف، Actix-web ایک نچلی سطح کا فریم ورک ہے جو کارکردگی اور اسکیل ایبلٹی کو ترجیح دیتا ہے۔ Actix ایک اداکار پر مبنی کنکرنسی ماڈل کا فائدہ اٹھاتا ہے اور نان بلاکنگ I/O فراہم کرتا ہے جو پیکج کو بہترین ویب ایپلیکیشنز بنانے کے لیے مثالی بناتا ہے۔

ایکٹکس کو بطور پروجیکٹ انحصار میں شامل کریں۔ انحصار آپ کے حصے charge.toml فائل:

 [dependencies] 
actix-web = "4.3.1"

اپنے پراجیکٹ کے لیے لائبریری کا انتخاب آپ کے پروجیکٹ کی خصوصیات، لائبریری کی خصوصیات اور Rust اور HTTP کے ساتھ آپ کے تجربے پر منحصر ہوگا۔

زنگ میں ایک سادہ ویب سرور بنانا

رسٹ پروجیکٹ بنانے اور اپنے پروجیکٹ کے انحصار میں کسی بھی راکٹ یا ایکٹکس فریم ورک کو شامل کرنے کے بعد charge.toml فائل، آپ Rust میں ویب سرور بنانا شروع کرنے کے لیے تیار ہیں۔

Actix کے ساتھ ایک سادہ ویب سرور بنانا

  Actix GitHub URL کا پیش نظارہ

رسٹ میں ویب سروسز بناتے وقت آپ درخواستوں کے لیے سیریلائزر استعمال کر سکتے ہیں۔

Serde زنگ کی اقسام اور ڈیٹا فارمیٹس جیسے JSON، YAML، اور TOML کے درمیان ڈیٹا کو سیریلائز کرنے اور ڈی سیریلائز کرنے کے لیے ایک مقبول Rust لائبریری ہے۔ Serde Rast ڈیٹا ڈھانچے اور دیگر ڈیٹا فارمیٹس میں متعلقہ نمائندگی کے درمیان ڈیٹا کی تبدیلی کی وضاحت کے لیے ایک فریم ورک فراہم کرتا ہے۔

Serde کو آپ کے پروجیکٹ کے لیے تھرڈ پارٹی پیکج کے طور پر شامل کرنے کی ہدایت یہ ہے۔

 [dependencies] 
serde = { version = "1.0.159" , features = ["derive"] }

ایک بار جب آپ نے پروجیکٹ انحصار کے طور پر Serde اور Actix کو شامل کیا ہے، تو آپ Rust کے ساتھ ایک بنیادی ویب سرور بنا سکتے ہیں۔ یہاں ہے کہ آپ کس طرح ایک سادہ ترتیب دے سکتے ہیں۔ ہیلو ورلڈ! ویب سرور جو ایکٹکس کے ساتھ کلائنٹ کو ایک تار لکھتا ہے:

سب سے پہلے، سے ضروری ماڈیولز اور اقسام درآمد کریں۔ actix_web اور لازمی خانے:

لینکس میں ڈرائیو کیسے لگائیں
 use actix_web::{get, web, App, HttpResponse, HttpServer, Responder}; 
use serde::{Deserialize, Serialize};

آپ استعمال کریں گے۔ لازمی struct کے ساتھ کلائنٹ کو پیغام کو سیریلائز کرنا۔ Serde کلائنٹ کے لیے ساخت کو JSON میں تبدیل کر دے گا۔ پیغام کے لیے ڈھانچہ یہ ہے:

 #[derive(Debug, Serialize, Deserialize)] 
struct Message {
    message: String,
}

اب آپ اینڈ پوائنٹ کے لیے ہینڈلر فنکشن کی وضاحت کر سکتے ہیں۔ اپنے ہینڈلر فنکشن کے اوپری حصے میں، آپ حسب ضرورت طرز عمل کے لیے ڈیکوریٹر شامل کر سکتے ہیں:

 #[get("/")] 
async fn hello() -> impl Responder {
    HttpResponse::Ok().json(Message {
        message: "Hello, World!".to_owned(),
    })
}

دی ہیلو ہینڈلر فنکشن GET درخواستوں کو ہینڈل کرتا ہے۔ فنکشن ایک قسم لوٹاتا ہے جو لاگو کرتا ہے۔ جواب دیں۔ کی طرف سے خصوصیت ایکٹکس پیکج

دی json کا طریقہ Http جواب::Ok() type ایک struct مثال کے طور پر لیتا ہے۔ لازمی ہڈ کے نیچے ہینڈل کرتا ہے اور کلائنٹ کو جواب دیتا ہے۔

اختتامی نقطہ کی وضاحت کرنے کے بعد، آپ سرور کی مثال شروع کر سکتے ہیں اور اختتامی نقطہ کو راستے پر ماؤنٹ کر سکتے ہیں۔

 #[actix_web::main] 
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().service(hello))
        .bind("127.0.0.1:8080")?
        .run()
        .await
}

دی HttpServer::new فنکشن ایک نیا سرور مثال ہے۔ دی مرکزی فنکشن شروع ہوتا ہے، اور سرور ماؤنٹ کرتا ہے۔ ہیلو نئی ایپ مثال کے ساتھ ہینڈلر فنکشن۔ دی باندھنا طریقہ سرور کو مخصوص URL سے منسلک کرتا ہے، اور رن فنکشن سرور چلاتا ہے۔

  ایکٹکس کے اختتامی نقطہ کی جانچ سے نتیجہ

راکٹ کے ساتھ ایک سادہ ویب سرور بنانا

  راکٹ URL کا پیش نظارہ

راکٹ کم سے کم ہے، لہذا آپ بغیر کسی انحصار کے ایک سادہ ویب سرور ترتیب دے سکتے ہیں۔ راکٹ کریٹ

ونڈوز 10 اپ ڈیٹ کمپیوٹر کو سست کر دیتا ہے۔

یہاں a کے ساتھ ایک سادہ سرور ترتیب دینے کا طریقہ ہے۔ ہیلو ورلڈ! راکٹ کا استعمال کرتے ہوئے اختتامی نقطہ:

پہلے، اپنے سرور کے لیے ضروری انحصار درآمد کریں۔

 #![feature(proc_macro_hygiene, decl_macro)] 

#[macro_use]
extern crate rocket;

// imports from the Rocket crate
use rocket::response::content;
use rocket::State;

دی #![خصوصیت(proc_macro_hygiene, decl_macro)] انتساب راکٹ فریم ورک کے لیے Rust تجرباتی خصوصیات کو قابل بناتا ہے۔ دی #[میکرو_استعمال] attribute سے میکرو درآمد کرتا ہے۔ راکٹ ماڈیول

یہاں ایک ہینڈلر فنکشن ہے جو درخواست پر HTML کی خدمت کرتا ہے:

 #[get("/")] 
fn hello_world() -> content::Html<&'static str> {
    content::Html("<h1>Hello, world!</h1>")
}

دی ہیلو_دنیا فنکشن کے ساتھ ایک HTML جامد سٹرنگ واپس کرتا ہے۔ مواد:: ایچ ٹی ایم ایل فنکشن

سرور (راکٹ فریم ورک کنونشن):

 struct Config { 
    port: u16,
}

#[get("/port")]
fn port(config: State<Config>) -> String {
    format!("Server running on port {}", config.port)
}

جب آپ سرور چلاتے ہیں، تو آپ کو درخواستیں دے سکتے ہیں۔ /پورٹ بندرگاہ کی حیثیت کے لئے اختتامی نقطہ۔

آخر میں، آپ کے ساتھ ایک سرور مثال بنائیں گے۔ بھڑکانا فنکشن کنفیگریشنز شامل کریں، روٹس کو ماؤنٹ کریں، اور سرور لانچ کریں:

 fn main() { 
    let config = Config { port: 8000 };

    rocket::ignite()
        .manage(config)
        .mount("/", routes![hello_world, port])
        .launch();
}

دی تشکیل متغیر کی ایک مثال ہے۔ ترتیب ساخت دی بھڑکانا فنکشن سرور کی مثال شروع کرتا ہے، انتظام طریقہ سرور میں ترتیب کو شامل کرتا ہے، اور پہاڑ طریقہ ہینڈلر فنکشن کو بیس روٹس پر ماؤنٹ کرتا ہے۔ آخر میں، لانچ طریقہ مخصوص پورٹ پر سننے کے لیے سرور کو لانچ کرتا ہے۔

آپ WASM کے ساتھ زنگ میں طاقتور ویب ایپلیکیشنز بنا سکتے ہیں۔

WebAssembly (WASM) ایک بائنری انسٹرکشن فارمیٹ ہے جسے براؤزرز اور دیگر آلات پر عمل درآمد کے لیے ڈیزائن کیا گیا ہے۔ WASM ایک نچلی سطح کا بائیک کوڈ فارمیٹ فراہم کرتا ہے جسے رسٹ جیسی اعلیٰ سطح کی پروگرامنگ زبانیں ایک تالیف ہدف کے طور پر استعمال کر سکتی ہیں۔

WASM کے ساتھ، آپ اپنے Rust کوڈ کو بائنری فارمیٹ میں مرتب کر سکتے ہیں جسے سب سے زیادہ مشہور براؤزر چلا سکتے ہیں۔ WASM نے Rust میں مضبوط ویب ایپلیکیشنز بنانے کے امکانات کی دنیا کھول دی ہے، بشمول فل اسٹیک ویب ایپس۔