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

Tic Tac Toe: Cycle de contenu

Dans cet article, nous considérerons une implémentation backend utilisant la bibliothèque C ++ Boost.Beast à l' aide d'un exemple de serveur synchrone. La même fonctionnalité que dans l' article précédent - nous obtenons un nombre aléatoire de 0 à 8 inclus du backend. Il s'est avéré qu'élever le conteneur pour Beast n'est pas plus difficile que pour Flask. L'essentiel est de trouver immédiatement un bon exemple approprié . Ici, j'ai pris un Dockerfile pour mon projet.


image


La photo a été prise à partir de la présentation de ce rapport pour attirer l'attention, ainsi que pour augmenter l'humeur et la motivation de ceux qui ne connaissent pas le C ++.


Installation du projet

Nous clonons le projet sur votre ordinateur:


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

Lancement de conteneurs:


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

Nous construisons l'application web:


 cd front npm install npm run-script build 

Ouvrez le navigateur à http: // localhost .


Conteneurs Docker

Le service de flacon a été remplacé par le service de bête .


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

Ici, seul le paramètre du fichier de configuration nginx'a default.conf a été modifié.


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

Backend

Dockerfile a été pris ici: 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 

Comme vous pouvez le voir, la technologie d' assemblage en plusieurs étapes est utilisée. À la première étape, les packages et les bibliothèques Boost nécessaires sont installés, le serveur http_server_sync est construit . À la deuxième étape, le serveur terminé est copié dans le conteneur final et y est lancé.


Le code source du serveur synchrone a été pris ici . Ajout d'une fonction handle_number_request pour gérer la demande à / 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)); } 

Dans le corps de la réponse, nous écrivons un nombre aléatoire de 0 à 8 inclus.


Conclusion

Comme vous pouvez le voir, Flask nous a aidés à nous faire rapidement une idée générale de l'interaction entre le frontend et le backend, nous avons rapidement obtenu le framework de l'application entière. Lors du développement du backend Beast, nous avons déjà compris comment l'interaction était organisée et nous nous concentrions uniquement sur la recherche du bon conteneur et l'écriture du serveur backend lui-même.


Pour faire vos devoirs, vous pouvez essayer de refaire le service nginx en utilisant une construction en plusieurs étapes, afin que le frontend soit assemblé à la première étape. Maintenant, le service nginx est configuré de sorte qu'il est plus pratique d'effectuer le développement frontal, sans assemblage inutile.


Deuxième devoir: essayez de supprimer le service nginx et augmentez le frontend dans le service beast. Je pense que ça devrait marcher.


Postez vos décisions dans les commentaires.


La troisième tâche: méditer sur le sujet de l'évolutivité - verticale et horizontale. Comment combiner ces deux langages, C ++ et Python, dans un cadre Web pour résoudre ce problème.


Dépôt GitHub

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

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


All Articles