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.

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