рдЯрд┐рдХ рдЯреАрдПрд╕реА рдХреЛ рдкреИрд░ рдХреА рдЕрдВрдЧреБрд▓реА, рднрд╛рдЧ 5: рд╕реА ++ рдмреИрдХреЗрдВрдб рдмреВрд╕реНрдЯредрдмреАрд╕реНрдЯ, рдПрдЪрдЯреАрдЯреАрдкреА

рдЯрд┐рдХ рдЯреАрдПрд╕реА рдХреЛ рдкреИрд░ рдХреА рдЕрдВрдЧреБрд▓реА: рд╕рд╛рдордЧреНрд░реА рдЪрдХреНрд░

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо C ++ Boost.Beast рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рд░реНрд╡рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмреИрдХрдПрдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ - рд╣рдореЗрдВ рдмреИрдХрдПрдВрдб рд╕реЗ 0 рд╕реЗ 8 рддрдХ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдорд┐рд▓рддреА рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдмреАрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдЙрдард╛рдирд╛ рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рддреБрд░рдВрдд рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдвреВрдВрдврдирд╛ рд╣реИред рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░рдлрд╛рдЗрд▓ рд▓рд┐рдпрд╛ред


рдЫрд╡рд┐


рдЪрд┐рддреНрд░ рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рде рд╣реА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрдб рдФрд░ рдкреНрд░реЗрд░рдгрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реА ++ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд╛рдкрдирд╛

рд╣рдо рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ:


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

рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:


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

рд╣рдо рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ:


 cd front npm install npm run-script build 

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ http: // localhost рдкрд░ рдЦреЛрд▓реЗрдВред


рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░

рдлреНрд▓рд╛рд╕реНрдХ рд╕реЗрд╡рд╛ рдХреЛ рдЬрд╛рдирд╡рд░реЛрдВ рдХреА рд╕реЗрд╡рд╛ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдбреЛрдХрд░-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 

рджреГрд╢реНрдпрдкрдЯрд▓

рдпрд╣рд╛рдВ, рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ nginx'a default.conf рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧ рдмрджрд▓ рджреА рдЧрдИ рдереАред


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

рдмреИрдХрдПрдВрдб

Dockerfile рдХреЛ рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛: 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 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдЕрд╕реЗрдВрдмрд▓реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рдФрд░ рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ, http_server_sync рд╕рд░реНрд╡рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ, рддреИрдпрд╛рд░ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдВрддрд┐рдо рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд░реНрд╡рд░ рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред / рдирдВрдмрд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ handle_number_request рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред


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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рдореЗрдВ рд╣рдо 0 рд╕реЗ 8 рд╕рдорд╛рд╡реЗрд╢реА рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред


рдирд┐рд╖реНрдХрд░реНрд╖

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдлреНрд▓рд╛рд╕реНрдХ рдиреЗ рд╣рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдлреНрд░рдВрдЯрдПрдВрдб рдФрд░ рдмреИрдХрдПрдВрдб рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА, рд╣рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдорд┐рд▓ рдЧрдИред рдмреАрд╕реНрдЯ рдмреИрдХреЗрдВрдб рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭ рдЧрдП рдереЗ рдХрд┐ рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЧрдИ рдереА рдФрд░ рдХреЗрд╡рд▓ рд╕рд╣реА рдХрдВрдЯреЗрдирд░ рдЦреЛрдЬрдиреЗ рдФрд░ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЕрдкрдиреЗ рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЗрдЧреНрдиреЗрдХреНрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рд░реАрдореЗрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдлреНрд░рдВрдЯреЗрдВрдб рдХреЛ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдм рдиреЗрдЧрдиреЗрдХреНрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдмрд┐рдирд╛, рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛред


рджреВрд╕рд░рд╛ рд╣реЛрдорд╡рд░реНрдХ: рдирдЧреНрдиреЗрдХреНрд╕ рд╕реЗрд╡рд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдФрд░ рдЬрд╛рдирд╡рд░ рд╕реЗрд╡рд╛ рдореЗрдВ рд╕реАрдорд╛ рдмрдврд╝рд╛рдПрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рдкреЛрд╕реНрдЯ рдХрд░реЗрдВред


рддреАрд╕рд░рд╛ рдХрд╛рд░реНрдп: рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ - рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдФрд░ рдХреНрд╖реИрддрд┐рдЬред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЗрди рджреЛ рднрд╛рд╖рд╛рдУрдВ, C ++ рдФрд░ рдкрд╛рдпрдерди рдХреЛ рдХреИрд╕реЗ рдорд┐рд▓рд╛рдПрдВред


рдЧрд┐рдЯрд╣рдм рднрдВрдбрд╛рд░

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

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


All Articles