Rouille هي مكتبة Micro-Web-Framework. إنه ينشئ مقبس الاستماع ويؤدي طلبات HTTP الواردة من العملاء ، ثم يمنحك اليد لمعالجة الطلب.
تم تصميم Rouille ليكون بديهيًا للاستخدام إذا كنت تعرف الصدأ. على عكس الأطر الشبيهة بالصورة ، فإنه لا يستخدم الأوساط المتوسطة. بدلاً من ذلك ، يتم التعامل مع كل شيء بطريقة خطية.
يتم دعم المفاهيم المتعلقة ارتباطًا وثيقًا بمواقع الويب (مثل ملفات تعريف الارتباط ، CGI ، إدخال النموذج ، إلخ) مباشرة بواسطة Rouille. لا يتم التعامل مع المزيد من المفاهيم العامة (مثل معالجة قواعد البيانات أو التقييم) مباشرة ، حيث تعتبر متعامدًا لإطار الويب الصغير. ومع ذلك ، فإن تصميم Rouille يجعل من السهل استخدامه مع أي مكتبة طرف ثالث دون الحاجة إلى أي رمز غراء.
إذا كانت لديك معرفة عامة حول كيفية عمل HTTP ، فإن الوثائق والأمثلة الموثقة جيدًا هي موارد جيدة لتبدأ.
مرخصة تحت أي من
ما لم تقل صراحةً خلاف ذلك ، فإن أي مساهمة يتم تقديمها عمداً لإدراجها في العمل بواسطتك تكون مرخصة مزدوجة على النحو الوارد أعلاه ، دون أي شروط أو شروط إضافية.
لا تزال غير ناضجة للغاية من I/O ، الخيوط الخضراء ، coroutines ، إلخ. في الصدأ.
تتجاهل مكتبة Rouille هذا التحسين وتركز على توفير واجهة برمجة تطبيقات متزامنة سهلة الاستخدام بدلاً من ذلك ، حيث يتم التعامل مع كل طلب في موضوعه المخصص.
حتى لو كانت Rouille نفسها غير متزامنة ، فستحتاج إلى عملاء قاعدة بيانات غير متزامن وتحميل الملفات غير المتزامن من أجل الاستفادة منه. لا توجد حاليًا مثل هذه المكتبات في النظام الإيكولوجي للصدأ.
بمجرد اكتشاف I/O ASYNC ، سيتم تحديث Rouille (نأمل بشفافية) لأخذها في الاعتبار.
على آلة Linux القديمة للمؤلف ، يعرض بعض القياس الأساسي مع wrk -t 4 -c 4 النتائج التالية:
http.createServer ) تعطي ~ 14k طلب/ثانية.على الرغم من أنه ليس الأسرع ، فإن رويل لديه عروض معقولة . من بين كل هذه الأمثلة ، Rouille هو الوحيد الذي يستخدم I/O المتزامن.
يجب أن يكون تافهة دمج قاعدة بيانات أو قوالب إلى خادم الويب الخاص بك المكتوب باستخدام Rouille. علاوة على ذلك ، تحتاج الإضافات إلى الصيانة وتميل إلى خلق جحيم التبعية. في رأي المؤلف ، من الأفضل عمومًا عدم استخدام الإضافات.
بدلاً من القيام بذلك: (الكود الكاذب)
server . add_middleware ( function ( ) {
// middleware 1
} ) ;
server . add_middleware ( function ( ) {
// middleware 2
} ) ;
server . add_middleware ( function ( ) {
// middleware 3
} ) ;في Rouille ، تتعامل مع كل طلب يدويًا تمامًا:
// initialize everything here
rouille :: start_server ( .. . , move |request| {
// middleware 1
// middleware 2
// middleware 3
} ) ;