تنفيذ خادم HTTP استنادًا إلى C ++ 11 ، والذي يمكن بسهولة إضافة مثيل CGI. يمكنه التعامل مع الموارد الثابتة ، ودعم اتصالات HTTP الطويلة ، وهلم جرا. نقوم أيضًا بتنفيذ السجل غير المتزامن لتسجيل حالة الخادم.
اختبار صفحة : examplecgi و logincgi و exploadcgi
أ) لتجميع الملفات المصدر في المواد التنفيذية الثنائية (في المجلد الجذر)
bash install.shب) تشغيل البرنامج (في مجلد البناء)
cd build
./httpcgiservermainأ) اكتب فئة مثيل CGI ، والتي ترث فئة Basecgi ، مثل explecgi.
ب) إضافة مثيل CGI إلى cgiinstancefactory.
ج) إضافة ملف الرأس إلى cgiheader.
د) تعديل cmakelists.txt.
ه) ثم بناء وتشغيل.
يتم عرض نتيجة الاختبار بواسطة WebBench هنا.
انظر impldoc.md للحصول على نظرة عامة موجزة على التنفيذ. دليل ملفات الرأس:
واجهة BASE/LOG.H لنظام السجل ، وهو من السجل غير المتزامن.
epoller.h تغليف الوظائف ذات الصلة من Epoll.
netutil.h تغليف الوظائف ذات الصلة للمقبس FD.
SimpleBuffer.h Application Layer Buffer (نقوم فقط بتنفيذ نموذج LT الآن).
قناة.
minheap.h استخدم Min Heap لإدارة وقت الاتصال المنتهي به.
EventLoop.h يدير القناة (الحدث) ، والتي يتم تسجيلها إلى Epoller ، ومعالجة القنوات النشطة (الأحداث).
EventLoopThread.h إنه يدير قائمة انتظار اتصال ، و Conction Contract Push Connection Socket FD في قائمة الانتظار ، ثم يضيف هذا الموضوع FDS Socket إلى EventLoop.
EventLoopthReadPool.h إنه يدير عدة مؤشرات ترابط ، مقبس اتصال مؤشر ترابط Main Contrad FD في ThreadPool ، يقوم بإرسال المقبس إلى مؤشرات الترابط الخاصة به.
TCPServer.H قبول مقبس الاتصال FD ، وعندما يحدث حدث قراءة على مأخذ التوصيل ، فإنه يقرأ تلقائيًا دفق البايت في المخزن المؤقت للتطبيق للقناة ، وتنفيذ وظيفة رد الاتصال القراءة. نفس أحداث الكتابة والأحداث خطأ.
httpmessage.h تحليل طلب HTTP ، بناء رسالة استجابة http. هنا ، نستخدم جهاز الحالة لمعالجة طلبات HTTP.
basecgi.h الفئة المجردة لفئة مثيل CGI. يوفر واجهة العملية ، نستخدمها لمعالجة طلب CGI.
includeCgiHeader.h تضمين فئة مثيل CGI ، والتي يتم استخدامها في cgidispatch.
cgidispatch.h مرسل CGI ، والذي يستخدم عنوان URL للعثور على مثيل CGI ، لتنفيذ برنامج CGI.
httpcgiserver.h عند قراءة الحدث ، فإنه يقوم أولاً بتوزيع طلب HTTP في المخزن المؤقت للتطبيق للقناة ، ثم يجد مثيل CGI ومعالجة الطلب.
httpcgiservermain.cpp خادم http الرئيسي.
examplecgi/examplecgi.h و logincgi/logincgi.h مثال على كيفية كتابة فئة مثيل CGI. يتضمن WebFile/Login ملفات .html ، .js ، .css التي تحتاجها فئة LoginCgi.