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

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.


Bild


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 .


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

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

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


All Articles