تعرف على كيفية إنشاء خادم ويب HTTP مخصص باستخدام حزمة Rust's Actix أو Rocket.
يستخدم HTTP بنية خادم العميل للمعلومات ونقل البيانات. تتمثل إحدى ميزات لغات البرمجة من جانب الخادم مثل Rust في تطوير الخوادم وتطبيقات العميل للتفاعل مع الخدمات المستندة إلى HTTP.
يعتبر Rust مناسبًا لبناء خوادم HTTP نظرًا لميزات الأمان والأداء والموثوقية. تشتهر صناديق Rust التابعة لجهات خارجية مثل Actix و Rocket ببناء خوادم ويب متطورة يمكنها التعامل مع حركة المرور العالية.
لماذا يجب عليك استخدام Rust لتطوير خادم ويب HTTP؟
اكتسب Rust شعبية لتطوير خادم الويب نظرًا لأن بعض ميزات اللغة هي بالضبط متطلبات بناء معظم خوادم الويب.
يضمن استخدام Rust توسيع نطاق تطبيقك بكفاءة ، مما يجعل اللغة مثالية لإنشاء تطبيقات عالية الأداء. فيما يلي أسباب محددة للنظر في استخدام Rust لخادم الويب الخاص بك والتطبيقات الأخرى من جانب الخادم.
أداء عالي الصدأ
يعد الأداء العالي أحد الأسباب التي تجعل Rust خيارًا ممتازًا لبناء خوادم ويب HTTP. يوفر Rust وصولاً منخفض المستوى إلى موارد النظام ، بما في ذلك الذاكرة ووحدة المعالجة المركزية ، مما يتيح لك كتابة التعليمات البرمجية التي تعمل بشكل أسرع بموارد أقل من اللغات الأخرى الموجودة على جانب الخادم.
بالإضافة إلى ذلك ، يلغي نظام ملكية Rust الحاجة إلى جمع البيانات المهملة في وقت الترجمة ، وهو أحد أسباب بطء بعض لغات الخادم.
السلامة والأمن
يجعل نظام ملكية Rust لإدارة الذاكرة اللغة آمنة لتطوير خادم الويب. لا تواجه مراجع مؤشر فارغة أو متدلية يمكن أن تؤدي إلى تسرب في الذاكرة ونقاط ضعف أمنية أخرى.
نظام ملكية روست يمنع هذه الأخطاء الشائعة للحفاظ على أمان الخادم والتطبيقات. يركز Rust أيضًا على منع فائض المخزن المؤقت والأخطاء الأخرى المتعلقة بالذاكرة.
التزامن
التزامن هو القدرة على تشغيل وحدات متعددة من البرنامج بطريقة خارج الترتيب دون التأثير على المخرجات. يجب أن يكون إخراج البرنامج المتزامن هو نفسه إخراج البرنامج غير المتزامن.
يمكن أن يؤثر التزامن بشكل كبير على أداء التطبيق الخاص بك لأن الخوادم تحتاج إلى معالجة طلبات متعددة في وقت واحد. يوفر Rust دعمًا للتعايش مع نموذج خيوط خفيف الوزن.
تتمثل ميزة البرمجة المتزامنة في Rust في أن نظام الملكية يسمح لك بكتابة رمز آمن للخيط دون الحاجة إلى أقفال وأساسيات التزامن أخرى.
مكتبة Rust القياسية و حزم الجهات الخارجية في نظام Rust البيئي توفير الأدوات الحديثة للفعالية تطوير خادم الويب.
يعمل Cargo ، مدير حزم Rust ، على تبسيط إدارة التبعية وبناء العمليات. بالإضافة إلى ذلك ، يتمتع Rust بدعم IDE ممتاز مع أدوات مثل Rust Analyzer التي توفر إكمالًا سلسًا للكود وإبراز الأخطاء وميزات أخرى.
نظرة عامة على مكتبات Actix و Rocket
تحتوي مكتبة Rust's Standard Library على معظم الأدوات التي ستحتاجها لإنشاء خوادم الويب. مكتبات الطرف الثالث مثل صاروخ و أكتيكس تبسيط إنشاء التطبيقات من جانب الخادم باستخدام Rust.
أكتيكس و صاروخ هي أطر ويب Rust شائعة ، لكن المكتبات تختلف في التصميم والميزات.
Rocket عبارة عن إطار عمل ويب عالي المستوى يعطي الأولوية للإنتاجية وسهولة الاستخدام. يوفر Rocket الكثير من الأفكار التجريدية والسكر النحوي لبناء تطبيقات الويب في Rust. تشتهر Rocket أيضًا بكتابتها القوية وتصميم واجهة برمجة التطبيقات البديهي.
يمكنك إضافة Rocket باعتباره تبعية مشروع في ملف Cargo.toml ملف لبدء إنشاء تطبيقات الويب في Rust:
[التبعيات]
صاروخ = "0.4.11"
من ناحية أخرى ، يعد Actix-web إطار عمل منخفض المستوى يعطي الأولوية للأداء وقابلية التوسع. يستفيد Actix من نموذج التزامن قائم على الممثلين ويوفر إدخال / إخراج غير معوق يجعل الحزمة مثالية لبناء تطبيقات ويب عالية الأداء.
أضف Actix باعتباره تبعية المشروع في ملف التبعيات قسم الخاص بك Cargo.toml ملف:
[التبعيات]
أكتيكس ويب = "4.3.1"
يعتمد اختيار مكتبة لمشروعك على مواصفات مشروعك ، وميزات المكتبة ، وتجربتك مع Rust و HTTP.
بناء خادم ويب بسيط في Rust
بعد إنشاء مشروع Rust وإضافة أي من أطر عمل Rocket أو Actix إلى تبعيات مشروعك في ملف Cargo.toml ملف ، فأنت جاهز لبدء إنشاء خادم ويب في Rust.
بناء خادم ويب بسيط باستخدام Actix
يمكنك استخدام مُسلسل للطلبات عند إنشاء خدمات الويب في Rust.
Serde هي مكتبة Rust شائعة لتسلسل البيانات وإلغاء تسلسلها بين أنواع Rust وتنسيقات البيانات مثل JSON و YAML و TOML. يوفر Serde إطار عمل لتحديد تحويل البيانات بين هياكل بيانات Rust والتمثيلات المقابلة في تنسيقات البيانات الأخرى.
إليك التوجيه لإضافة Serde كحزمة خارجية لمشروعك.
[التبعيات]
سيردي = {الإصدار = "1.0.159"، الميزات = ["استخلاص"] }
بمجرد إضافة Serde و Actix كعناصر تابعة للمشروع ، يمكنك إنتاج خادم ويب أساسي باستخدام Rust. إليك كيفية إعداد ملف مرحبا بالعالم! خادم الويب الذي يكتب سلسلة إلى العميل باستخدام Actix:
أولاً ، قم باستيراد الوحدات والأنواع اللازمة من ملف actix_web و سيردي الصناديق:
يستخدم actix_web:: {get، web، App، HttpResponse، HttpServer، Responder}؛
يستخدم serde:: {Deserialize، Serialize}؛
سوف تستخدم سيردي لتسلسل رسالة إلى العميل باستخدام بنية. سيقوم Serde بتحويل البنية إلى JSON للعميل. إليك هيكل الرسالة:
# [اشتقاق (تصحيح ، تسلسل ، إلغاء التسلسل)]
هيكلرسالة {
رسالة: خيط,
}
يمكنك الآن تحديد وظيفة المعالج لنقطة النهاية. في الجزء العلوي من وظيفة المعالج ، يمكنك إضافة مصممين للسلوكيات المخصصة:
#[يحصل("/")]
غير متزامنالجبهة الوطنيةمرحبًا() -> ضمني المستجيب {
استجابة Http ::نعم() .json (الرسالة {
رسالة: "مرحبا بالعالم!"مملوكة () ،
})
}
ال مرحبًا يعالج وظيفة المعالج طلبات GET. تقوم الدالة بإرجاع نوع يقوم بتنفيذ ملف المستجيب سمة من أكتيكس طَرد.
ال json طريقة HttpResponse:: حسنًا () النوع يأخذ في مثيل هيكل أن سيردي يعالج تحت الغطاء ويعيد الاستجابة إلى العميل.
بعد تحديد نقطة النهاية ، يمكنك بدء مثيل الخادم وتركيب نقطة النهاية على المسار.
# [actix_web:: main]
غير متزامنالجبهة الوطنيةرئيسي() -> الأمراض المنقولة جنسياً:: io ::نتيجة {
HttpServer:: new (|| App:: new (). service (hello))
.ربط("127.0.0.1:8080")?
.يجري()
.انتظر
}
ال HttpServer:: جديد الوظيفة هي مثيل خادم جديد. ال رئيسي تبدأ الوظيفة ، ويقوم الخادم بتركيب ملف مرحبًا handler مع مثيل التطبيق الجديد. ال ربط الطريقة تربط الخادم بعنوان URL المحدد ، و يجري تعمل وظيفة الخادم.
بناء خادم ويب بسيط باستخدام صاروخ
Rocket هو أضيق الحدود ، لذا يمكنك إعداد خادم ويب بسيط دون أي تبعيات بخلاف صاروخ قفص.
إليك كيفية إعداد خادم بسيط بامتداد مرحبا بالعالم! نقطة النهاية باستخدام صاروخ:
أولاً ، قم باستيراد التبعيات الضرورية لخادمك.
#! [ميزة (proc_macro_hygiene، رفض_ماكرو)]
# [استخدام الماكرو]
خارجيقفص صاروخ؛
// الواردات من صندوق الصواريخ
يستخدم صاروخ:: رد:: محتوى ؛
يستخدم صاروخ:: دولة ؛
ال #! [ميزة (proc_macro_hygiene، رفض_ماكرو)] السمة تمكن ميزات Rust التجريبية لإطار عمل Rocket. ال # [استخدام الماكرو] تستورد السمة وحدات الماكرو من ملف صاروخ وحدة.
فيما يلي وظيفة معالج تخدم HTML عند الطلب:
#[يحصل("/")]
الجبهة الوطنيةمرحبا بالعالم() -> المحتوى:: Html 'ثابتةشارع> {
المحتوى:: Html ("مرحبا بالعالم!
")
}
ال مرحبا بالعالم تقوم الدالة بإرجاع سلسلة HTML ثابتة بامتداد المحتوى:: Html وظيفة.
إليك إعلان بنية التكوين للخادم (اصطلاح إطار عمل Rocket):
هيكلالتكوين {
ميناء: u16,
}
#[يحصل("/ميناء")]
الجبهة الوطنيةميناء(التكوين: State) -> خيط {
شكل!("الخادم يعمل على المنفذ {}"، config.port)
}
عند تشغيل الخادم ، يمكنك تقديم طلبات إلى ملف /port نقطة النهاية لحالة المنفذ.
أخيرًا ، ستنشئ مثيل خادم بامتداد يشعل وظيفة. أضف التكوينات ، وقم بتركيب المسارات ، وقم بتشغيل الخادم:
الجبهة الوطنيةرئيسي() {
يترك config = التكوين {المنفذ: 8000 };
صاروخ:: إشعال ()
.manage (التكوين)
.تتعدد("/"، طرق! [hello_world، port])
.يطلق()؛
}
ال التكوين المتغير هو مثيل لـ التكوين هيكل. ال يشعل الدالة تبدأ مثيل الخادم ، يدير يضيف الأسلوب التكوين إلى الخادم ، و تتعدد تقوم الطريقة بتثبيت وظيفة المعالج على المسارات الأساسية. وأخيرا، فإن يطلق طريقة تشغيل الخادم للاستماع على المنفذ المحدد.
يمكنك إنشاء تطبيقات ويب قوية في Rust باستخدام WASM
WebAssembly (WASM) هو تنسيق تعليمات ثنائي مصمم للتنفيذ على المتصفحات والأجهزة الأخرى. يوفر WASM تنسيقًا برمجيًا منخفض المستوى يمكن أن تستخدمه لغات البرمجة عالية المستوى مثل Rust كهدف تجميع.
باستخدام WASM ، يمكنك ترجمة كود Rust الخاص بك إلى تنسيق ثنائي يمكن لمعظم المتصفحات الشائعة تنفيذه. يفتح WASM عالمًا من الاحتمالات لبناء تطبيقات ويب قوية في Rust ، بما في ذلك تطبيقات الويب كاملة المكدس.