Tic Tac Toe, Bagian 5: C ++ Backend Boost.Beast, HTTP

Tic Tac Toe: Siklus Konten

Pada artikel ini, kami akan mempertimbangkan implementasi backend menggunakan pustaka C ++ Boost.Beast menggunakan contoh server sinkron. Fungsionalitas yang sama seperti pada artikel sebelumnya - kami mendapatkan angka acak dari 0 hingga 8 termasuk dari backend. Ternyata menaikkan wadah untuk Beast tidak lebih sulit daripada untuk Labu. Yang utama adalah segera menemukan contoh yang cocok dan bagus. Di sini saya mengambil Dockerfile untuk proyek saya.


gambar


Gambar diambil dari penyajian laporan ini untuk menarik perhatian, serta untuk meningkatkan mood dan motivasi bagi mereka yang tidak tahu C ++.


Instalasi Proyek

Kami mengkloning proyek di komputer Anda:


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

Luncurkan kontainer:


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

Kami membangun aplikasi web:


 cd front npm install npm run-script build 

Buka browser di http: // localhost .


Wadah buruh pelabuhan

Layanan labu diganti dengan layanan binatang .


docker-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 

Frontend

Di sini, hanya pengaturan dalam file konfigurasi nginx'a default.conf telah diubah.


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

Backend

Dockerfile dibawa ke sini: 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 

Seperti yang Anda lihat, teknologi perakitan multi-tahap digunakan. Pada tahap pertama, paket-paket yang diperlukan dan Boost library diinstal, server http_server_sync dibangun . Pada tahap kedua, server selesai disalin ke wadah terakhir dan diluncurkan di sana.


Kode sumber server sinkron diambil di sini . Menambahkan fungsi handle_number_request untuk menangani permintaan di / number .


 // 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)); } 

Di badan tanggapan kami menulis angka acak dari 0 hingga 8 inklusif.


Kesimpulan

Seperti yang Anda lihat, Flask membantu kami dengan cepat mendapatkan ide umum tentang interaksi antara frontend dan backend, kami dengan cepat mendapatkan kerangka kerja dari seluruh aplikasi. Saat mengembangkan backend Beast, kami sudah mengerti bagaimana interaksi diatur dan difokuskan hanya pada menemukan wadah yang tepat dan menulis server backend itu sendiri.


Sebagai pekerjaan rumah Anda, Anda dapat mencoba membuat kembali layanan nginx menggunakan multi-stage build, sehingga frontend terpasang pada tahap pertama. Sekarang layanan nginx dikonfigurasi sehingga lebih mudah untuk melakukan pengembangan front-end, tanpa perakitan yang tidak perlu.


Pekerjaan rumah kedua: coba hapus layanan nginx, dan naikkan frontend di layanan beast. Saya pikir itu harus berhasil.


Posting keputusan Anda di komentar.


Tugas ketiga: untuk merenungkan masalah skalabilitas - vertikal dan horizontal. Cara menggabungkan dua bahasa ini, C ++ dan Python, dalam satu kerangka kerja web untuk menyelesaikan masalah ini.


Repositori GitHub

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

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


All Articles