Связь с клиентом сервера на основе протокола Socket.IO.
Клиентская сторона * : | Серверная часть: |
---|---|
HTML, CSS, JS (включая фреймворк SocketIO) | Фреймворки Python: Flask, Flask SocketIO. |
* элементы внешнего интерфейса доски Tic Tac Toe, вдохновленные проектом Web Dev Simplified Tic Tac Toe — функциональность для двух игроков с одной стороны
В многопользовательской онлайн-игре «Крестики-нолики» обработку ходов, соединение игроков, управление чатом игроков и игровыми комнатами обеспечивает сервер (в данном случае с помощью фреймворков Flask, Flask SocketIO). По правилам крестиков-ноликов в одной игре участвуют только два игрока. Это означает, что сервер должен проверить наличие игровой комнаты и наличие двух игроков, прежде чем подключать нового.
Шаг 1 — Подключение
Шаг 2. Игрок проинформирован
Шаг 3 – начать игру
app.py
Файл, где начинается все самое интересное... Вот конфигурация фреймворков Flask и Flask Socket IO. После настройки маршруты Flask украшаются @app.route()
, а обработчики Flask SocketIO — @socketio.event
. В нижней части файла есть socketio.run(app, debug=True)
который запустит сервер. «Функция socketio.run()
инкапсулирует запуск веб-сервера и заменяет запуск стандартного сервера разработки Flask app.run()
». Сокет для колбыIO
oophelpers.py
Есть моделирование объектов Player()
и GameRoom()
. Внутри себя классы определяют поведение и необходимые атрибуты.
templates/
По сути, templates/index.html
— это просто HTML-страница, описывающая содержимое страницы — настольную игру и область журналов. В верхней части страницы есть модальное представление «Просмотр приветствия», которое меняет состояние: display: show
-> display: none
, когда событие сервера выдает информацию о доступности комнаты.
static/styles/
Здесь находятся файлы CSS, используемые для описания эстетики страницы.
static/scripts/
В файле main.js
находятся сценарии, которые делают возможным взаимодействие с веб-приложением. Файл начинается с « ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ » вверху, после чего анонимная функция addEventListener
joinButton
проверяется roomAvailability()
с помощью функций async
и await
. После подтверждения доступности комнаты вызывается userConnectedHandlers()
. Функции чата и игры предоставляются в EventListener, прикрепленном к кнопкам sendButton , startGameButton , restartButton .
requirements.txt
Этот файл просто описывает пакеты зависимостей для этого веб-приложения.
Один из способов запустить это приложение:
python -m venv [directory]
pip install -r requirements.txt
python app.py
или flask run
и посетите http://localhost:5000
в двух отдельных вкладках браузера. python app.py
или
flask run
Создайте образ из Dockerfile
docker build -t < img_name > .
docker build -t flask-tictactoe .
Запустите контейнер в фоновом режиме и опубликуйте порты контейнера на хосте.
docker run -d -p < host_port > : < container_port > < image_name >
docker run -d -p 80:5000 flask-tictactoe
Доступ к контейнеру в браузере по адресу: http://localhost
или http://127.0.0.1