基于Socket.IO协议的服务器客户端通信
客户端* : | 服务器端: |
---|---|
HTML、CSS、JS(包括SocketIO框架) | Python 框架:Flask、Flask SocketIO |
* Tic Tac Toe 棋盘的前端元素灵感来自 Web Dev Simplified Tic Tac Toe 项目 - 一侧 2 玩家功能
在在线多人井字游戏中,处理动作、处理玩家的连接、玩家聊天和游戏室管理都是由服务器提供的(在本例中借助 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()
函数封装了 Web 服务器的启动,并取代了app.run()
标准 Flask 开发服务器的启动。” Flask SocketIO
oophelpers.py
有Player()
和GameRoom()
对象的建模。类在其内部定义行为和所需的属性。
templates/
基本上, templates/index.html
只是一个 HTML 页面,描述页面的内容 - 棋盘游戏和日志区域。页面顶部有“问候语视图”作为模式视图,当服务器事件发出房间可用性时,它将更改状态: display: show
-> display: none
。
static/styles/
这就是用于描述页面美感的 CSS 文件。
static/scripts/
main.js
文件中包含使 Web 应用程序交互成为可能的脚本。该文件以顶部的“ VARIABLE DECLARATIONS ”开头,然后在joinButton
的addEventListener
匿名函数上通过async
和await
函数验证roomAvailability()
。一旦确认房间可用,就会调用userConnectedHandlers()
。聊天和游戏功能通过附加到sendButton 、 startGameButton 、 restartButton按钮的 EventListener 提供。
requirements.txt
该文件仅规定了此 Web 应用程序的依赖项包。
运行此应用程序的一种方法:
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