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

Tic Tac Toe: Ciclo de contenido

En este art铆culo, consideraremos una implementaci贸n de back-end usando la biblioteca C ++ Boost.Beast usando un ejemplo de un servidor s铆ncrono. La misma funcionalidad que en el art铆culo anterior : obtenemos un n煤mero aleatorio del 0 al 8 inclusive desde el backend. Result贸 que levantar el contenedor para Bestia no es m谩s dif铆cil que para Flask. Lo principal es encontrar de inmediato un buen ejemplo adecuado . Aqu铆 tom茅 un Dockerfile para mi proyecto.


imagen


La imagen se tom贸 de la presentaci贸n de este informe para atraer la atenci贸n, as铆 como para aumentar el estado de 谩nimo y la motivaci贸n de quienes no conocen C ++.


Proyecto de instalacion

Clonamos el proyecto en su computadora:


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

Lanzamiento de contenedores:


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

Construimos la aplicaci贸n web:


 cd front npm install npm run-script build 

Abra el navegador en http: // localhost .


Contenedores Docker

El servicio del matraz fue reemplazado por el servicio de la bestia .


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

Aqu铆, solo se modific贸 la configuraci贸n en el archivo de configuraci贸n nginx'a default.conf .


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

Backend

Dockerfile fue tomado aqu铆: 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 

Como puede ver, se utiliza la tecnolog铆a de ensamblaje de etapas m煤ltiples . En la primera etapa, se instalan los paquetes necesarios y las bibliotecas Boost, se construye el servidor http_server_sync . En la segunda etapa, el servidor terminado se copia en el contenedor final y se inicia all铆.


Aqu铆 se tom贸 el c贸digo fuente del servidor s铆ncrono. Se agreg贸 una funci贸n handle_number_request para manejar la solicitud en / 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)); } 

En el cuerpo de la respuesta, escribimos un n煤mero aleatorio del 0 al 8 inclusive.


Conclusi贸n

Como puede ver, Flask nos ayud贸 r谩pidamente a tener una idea general de la interacci贸n entre la interfaz y el backend, r谩pidamente obtuvimos el marco de toda la aplicaci贸n. Al desarrollar el backend de Beast, ya entendimos c贸mo se organiz贸 la interacci贸n y nos centramos solo en encontrar el contenedor correcto y escribir el servidor de back-end.


Como tarea, puede intentar rehacer el servicio nginx utilizando una compilaci贸n de varias etapas, de modo que la interfaz se ensamble en la primera etapa. Ahora el servicio nginx est谩 configurado para que sea m谩s conveniente llevar a cabo el desarrollo front-end, sin ensamblaje innecesario.


Segunda tarea: intenta eliminar el servicio nginx y eleva la interfaz en el servicio bestia. Creo que deber铆a funcionar.


Publique sus decisiones en los comentarios.


La tercera tarea: meditar sobre el tema de la escalabilidad, vertical y horizontal. C贸mo combinar estos dos lenguajes, C ++ y Python, en un marco web para resolver este problema.


Repositorio de GitHub

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

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


All Articles