docker run -it --rm -p 5672:5672 -p 15672:15672 rabbitmq:3.9-management
go mod download && cd RestServer && go run main.go
go mod download && cd PDFWorker && go run main.go
На данном этапе уже можно зайти на http://loacalhost:8080/index.html и использовать все функции REST сервера (создание, удаление пользователей, изменение параметров профиля пользователя, изменение аватара, получение статистики в виде пдф документа, просмотр профилей всех пользователей, либо профиля выбранного пользователя и т.д.).
Сервер реализует REST API (например один из возможных запросов - GET /users/:login/:property
), а также возвращает HTML страницы для удобного взаимодействия с REST API
(например GET /index.html
вернёт основную HTML страницу, с которой можно открывать другие HTML страницы по ссылкам (/index.html, /users.html, /signup.html
, ...)).
Более подробную информацию о всех поддерживаемых запросах к серверу можно узнать из исходного кода сервера (RestServer/main.go)
Так как сервер может возвращать HTML страницы, то в качестве клиента можно использовать браузер (я тестировал с Google Chrome 100.0.4896.127, но другие браузеры скорее всего тоже подойдут).
Для простоты реализации все данные хранятся в оперативной памяти сервера, при рестарте они никуда не сохраняются.
Сервер работает по HTTP, все данные и пароли передаются по сети в незашифрованном виде. С точки зрения реального приложения, это очень плохой подход, но это было сделано также ради простоты. (Т.к. не нужно получать TLS сертификат, и нет дополнительной сложности при отладке через curl, postman, при отправке запросов к серверу через resty и requests).
cd basic_mafia && pip3 install -r requirements.txt && python3 ./mafia_server.py
дальше вводим:
5000
http://localhost:8080
[::]
50051
cd basic_mafia && pip3 install -r requirements.txt && python3 ./mafia_client.py
вводим:
localhost:50051
IP адрес сервера, например 172.17.224.1. Адрес можно узнать, если посмотреть на строчку вида "Running on IP: 172.17.224.1", которая выводится в момент запуска mafia сервера.
5000
логин (например user1)
пароль (например 1234)
имя комнаты (например 1)
Пользователь перед запуском mafia клиента должен быть зарегистрирован в базе данных REST сервера, иначе войти в комнату не получится. Если все данные корректны, то после того, как в комнату войдут 4 игрока игра начнётся. Когда игра заканчивается, mafia server отправляет запрос к REST серверу, чтобы он обновил статистику по игрокам.
Данный шаг можно пропустить, если использовать контейнеры asmorodinov/pdfworker, asmorodinov/restserver, asmorodinov/mafiaserver вместо pdfworker, restserver, mafiaserver
docker build . -t pdfworker -f=DockerfilePDFWorker
docker build . -t restserver -f=DockerfileRestServer
cd basic_mafia && docker build . -t mafiaserver
docker network create test-net
docker run -it --rm --name rabbitmq --network test-net -p 5672:5672 -p 15672:15672 rabbitmq:3.9-management
docker run -i --network test-net --name server -p 8080:8080 restserver -mqaddr=amqp://guest:guest@rabbitmq:5672/ -addr=[::]:8080
или
docker run -i --network test-net --name server -p 8080:8080 asmorodinov/restserver -mqaddr=amqp://guest:guest@rabbitmq:5672/ -addr=[::]:8080
docker run -i --network test-net --name worker pdfworker -mqaddr=amqp://guest:guest@rabbitmq:5672/ -addr=http://server:8080
или
docker run -i --network test-net --name worker asmorodinov/pdfworker -mqaddr=amqp://guest:guest@rabbitmq:5672/ -addr=http://server:8080
docker run -p 5000:5000 -p 50051:50051 -i --name mafia --network test-net mafiaserver
или
docker run -p 5000:5000 -p 50051:50051 -i --name mafia --network test-net asmorodinov/mafiaserver
вводим:
5000
http://server:8080
[::]
50051
cd basic_mafia && pip3 install -r requirements.txt && python3 ./mafia_client.py
вводим:
localhost:50051
localhost
5000
логин (например user1)
пароль (например 1234)
имя комнаты (например 1)
Если запускать mafia сервер в докере, то voice chat не работает, а если без докера - то работает. Но в условии про наличие войс чата ничего сказано не было, поэтому это незначительная проблема.