การสื่อสารไคลเอนต์เซิร์ฟเวอร์ตามโปรโตคอล Socket.IO
ฝั่งไคลเอ็นต์ * : | ฝั่งเซิร์ฟเวอร์: |
---|---|
HTML, CSS, JS (รวมถึงกรอบงาน SocketIO) | เฟรมเวิร์ก Python: Flask, Flask SocketIO |
* องค์ประกอบส่วนหน้าของบอร์ด Tic Tac Toe ที่ได้รับแรงบันดาลใจจากโครงการ Tic Tac Toe แบบง่ายของ Web Dev - ฟังก์ชั่นผู้เล่น 2 คนด้านเดียว
ในเกม 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
คือสคริปต์ที่ทำให้การโต้ตอบของ webapp เป็นไปได้ ไฟล์เริ่มต้นด้วย " การประกาศตัวแปร " ที่ด้านบน หลังจากนั้นฟังก์ชันที่ไม่ระบุชื่อ 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