Tic Tac Toe: Inhaltszyklus
In diesem Artikel wird eine Backend-Implementierung unter Verwendung der C ++ Boost.Beast- Bibliothek anhand eines Beispiels eines synchronen Servers betrachtet. Dieselbe Funktionalität wie im vorherigen Artikel - wir erhalten vom Backend eine Zufallszahl von 0 bis einschließlich 8. Es stellte sich heraus, dass das Anheben des Behälters für Beast nicht schwieriger ist als für Flask. Die Hauptsache ist, sofort ein geeignetes Beispiel zu finden . Hier habe ich ein Dockerfile für mein Projekt genommen.

Das Bild wurde aus der Präsentation dieses Berichts aufgenommen , um Aufmerksamkeit zu erregen und die Stimmung und Motivation für diejenigen zu verbessern, die C ++ nicht kennen.
Projektinstallation
Wir klonen das Projekt auf Ihren Computer:
git clone https://github.com/nomhoi/tic-tac-toe-part5.git
Container starten:
cd tic-tac-toe-part5 docker-compose up -d
Wir erstellen die Webanwendung:
cd front npm install npm run-script build
Öffnen Sie den Browser unter http: // localhost .
Docker-Container
Der Flaschenservice wurde durch den Biestservice ersetzt.
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
Hier wurde nur die Einstellung in der Konfigurationsdatei nginx'a default.conf geändert.
location /number { proxy_pass http://beast:8080; }
Backend
Dockerfile wurde hier aufgenommen: 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
Wie Sie sehen, wird eine mehrstufige Montagetechnologie verwendet. In der ersten Phase werden die erforderlichen Pakete und Boost-Bibliotheken installiert und der http_server_sync- Server erstellt. In der zweiten Phase wird der fertige Server in den endgültigen Container kopiert und dort gestartet.
Hier wurde der Quellcode des Synchron-Servers übernommen. Es wurde eine handle_number_request- Funktion hinzugefügt , um die Anforderung unter / number zu verarbeiten .
In den Antworttext schreiben wir eine Zufallszahl von 0 bis einschließlich 8.
Fazit
Wie Sie sehen, hat Flask uns geholfen, schnell einen allgemeinen Überblick über die Interaktion zwischen Frontend und Backend zu erhalten. Wir haben schnell den Rahmen für die gesamte Anwendung erhalten. Bei der Entwicklung des Beast-Backends haben wir bereits verstanden, wie die Interaktion angeordnet war, und uns nur darauf konzentriert, den richtigen Container zu finden und den Backend-Server selbst zu schreiben.
Als Hausaufgabe können Sie versuchen, den Nginx-Service mithilfe eines mehrstufigen Builds neu zu erstellen, sodass das Frontend in der ersten Phase zusammengestellt wird. Jetzt ist der Nginx-Dienst so konfiguriert, dass die Front-End-Entwicklung ohne unnötige Montage bequemer durchgeführt werden kann.
Zweite Hausaufgabe: Versuchen Sie, den Nginx-Dienst zu entfernen und das Frontend im Bestien-Dienst anzuheben. Ich denke es sollte klappen.
Veröffentlichen Sie Ihre Entscheidungen in den Kommentaren.
Die dritte Aufgabe: über das Thema Skalierbarkeit meditieren - vertikal und horizontal. So kombinieren Sie diese beiden Sprachen, C ++ und Python, in einem Webframework, um dieses Problem zu lösen.
GitHub-Repository
https://github.com/nomhoi/tic-tac-toe-part5