تيك تاك تو ، الجزء 5: C ++ Backend Boost.Beast ، HTTP

تيك تاك تو: دورة المحتوى

في هذه المقالة ، سنضع في الاعتبار تطبيق الواجهة الخلفية باستخدام مكتبة C ++ Boost.Beast باستخدام مثال لخادم متزامن. نفس الوظيفة كما في المقالة السابقة - نحصل على رقم عشوائي من 0 إلى 8 شامل من الواجهة الخلفية. اتضح أن رفع الحاوية لـ Beast ليس أكثر صعوبة من Flask. الشيء الرئيسي هو العثور على الفور مثال جيد مناسب . هنا أخذت Dockerfile لمشروعي.


صورة


تم التقاط الصورة من العرض التقديمي لهذا التقرير لجذب الانتباه ، وكذلك لزيادة الحالة المزاجية والدافع لأولئك الذين لا يعرفون C ++.


تركيب المشروع

نحن استنساخ المشروع على جهاز الكمبيوتر الخاص بك:


git clone https://github.com/nomhoi/tic-tac-toe-part5.git 

حاويات الاطلاق:


 cd tic-tac-toe-part5 docker-compose up -d 

نحن نبني تطبيق الويب:


 cd front npm install npm run-script build 

افتح المتصفح على http: // localhost .


حاويات قفص الاتهام

تم استبدال خدمة القارورة بخدمة الوحش .


عامل ميناء-compose.yml:


 version: '3.6' services: nginx: image: nginx:alpine container_name: nginx volumes: - ./front/public:/usr/share/nginx/html - ./default.conf:/etc/nginx/conf.d/default.conf:ro ports: - "80:80" depends_on: - beast networks: - backend beast: container_name: beast build: context: beast/ dockerfile: Dockerfile ports: - "8080:8080" networks: - backend networks: backend: name: backend 

الواجهة

هنا ، تم تغيير الإعداد في ملف التكوين nginx'a default.conf فقط .


 location /number { proxy_pass http://beast:8080; } 

الخلفية

تم أخذ Dockerfile هنا: https://github.com/vinniefalco/CppCon2018 .


 FROM ubuntu:bionic AS build # Install tools required for the project RUN apt-get update \ && apt-get install gcc -y \ && apt-get install g++ -y \ && apt-get install cmake -y \ && apt-get install wget -y # Install Boost RUN cd /home \ && wget http://downloads.sourceforge.net/project/boost/boost/1.70.0/boost_1_70_0.tar.gz \ && tar xfz boost_1_70_0.tar.gz \ && rm boost_1_70_0.tar.gz \ && cd boost_1_70_0 \ && ./bootstrap.sh --with-libraries=system \ && ./b2 install # Copy the entire project and build it COPY ./app /cpp/src/project/ WORKDIR /cpp/src/project/ RUN g++ http_server_sync.cpp -o http_server_sync -lpthread FROM ubuntu:bionic COPY --from=build /cpp/src/project /app/ ENTRYPOINT ["/app/http_server_sync", "0.0.0.0", "8080", "/app/wwwroot"] EXPOSE 8080 

كما ترون ، يتم استخدام تكنولوجيا التجميع متعددة المراحل . في المرحلة الأولى ، يتم تثبيت الحزم الضرورية ومكتبات Boost ، تم بناء خادم http_server_sync . في المرحلة الثانية ، يتم نسخ الخادم النهائي إلى الحاوية النهائية ويتم إطلاقه هناك.


تم أخذ الكود المصدري للخادم المتزامن هنا . تمت إضافة دالة handle_number_request للتعامل مع الطلب على / رقم .


 // Return a random number template< class Body, class Allocator, class Send> void handle_number_request( beast::string_view doc_root, http::request<Body, http::basic_fields<Allocator>>&& req, Send&& send) { http::response<http::string_body> res; res.version(11); // HTTP/1.1 res.result(http::status::ok); res.set(http::field::server, "Beast"); res.body() = std::to_string(rand() % 9); res.prepare_payload(); return send(std::move(res)); } 

في نص الاستجابة ، نكتب رقمًا عشوائيًا من 0 إلى 8 ضمناً.


استنتاج

كما ترون ، ساعدنا Flask سريعًا في الحصول على فكرة عامة عن التفاعل بين الواجهة الأمامية والخلفية ، وسرعان ما حصلنا على إطار التطبيق بالكامل. عند تطوير الواجهة الخلفية Beast ، فهمنا بالفعل كيف تم ترتيب التفاعل وتركيزه فقط على العثور على الحاوية المناسبة وكتابة خادم الواجهة الخلفية نفسه.


كواجبك المنزلي ، يمكنك محاولة إعادة تشكيل خدمة nginx باستخدام بنية متعددة المراحل ، بحيث يتم تجميع الواجهة الأمامية في المرحلة الأولى. الآن تم تكوين خدمة nginx بحيث تكون أكثر ملاءمة لإجراء تطوير الواجهة الأمامية ، دون تجميع غير ضروري.


الواجب المنزلي الثاني: حاول إزالة خدمة nginx ، وارفع الواجهة الأمامية في خدمة الوحش. أعتقد أنه يجب أن تنجح.


أضف قراراتك في التعليقات.


المهمة الثالثة: التأمل في موضوع قابلية التوسع - العمودي والأفقي. كيفية دمج هاتين اللغتين ، C ++ و Python ، في إطار ويب واحد لحل هذه المشكلة.


مستودع جيثب

https://github.com/nomhoi/tic-tac-toe-part5

Source: https://habr.com/ru/post/ar460991/


All Articles