Hệ thống đặt vé xem phim real-time với Socket.IO & React. Ứng dụng cho phép nhiều người dùng cùng lúc chọn ghế, giữ chỗ và đặt vé xem phim với cập nhật thời gian thực.
- 🎫 Đăng nhập: Hỗ trợ tối đa 5 người dùng online cùng lúc
- 🪑 Chọn ghế: Chọn/bỏ chọn ghế với màu sắc trực quan
- 🔒 Giữ chỗ: Giữ ghế tạm thời (hiển thị màu cam)
- 🎟️ Đặt chỗ: Xác nhận đặt ghế (màu xám)
- 🔄 Real-time: Cập nhật trạng thái ghế theo thời gian thực
- 👥 Quản lý người dùng: Hiển thị người dùng online và ghế đang được giữ
Ứng dụng gồm 2 phần chính:
- Server: Express + Socket.IO (Port 5000)
- Client: React + Vite + Socket.IO Client (Port 5173)
movie-ticketing/
├── 📂 server/
│ ├── server.js # Socket.IO server
│ ├── package.json
│ └── node_modules/
│
├── 📂 client/
│ ├── 📂 src/
│ │ ├── App.jsx # Component chính
│ │ ├── index.jsx # Entry point
│ │ ├── 📂 components/
│ │ │ ├── SeatGrid.jsx # Grid hiển thị ghế
│ │ │ └── UserLogin.jsx # Form đăng nhập
│ │ └── socketHandler.js # Socket.IO handler
│ ├── index.html
│ ├── vite.config.js
│ ├── package.json
│ └── node_modules/
│
└── README.md
Server:
cd server
npm installClient:
cd client
npm installMở 2 terminal riêng biệt:
Terminal 1 - Server:
cd server
npm run dev✅ Server chạy tại: http://localhost:5000
🔍 Health check: http://localhost:5000/health
Terminal 2 - Client:
cd client
npm run dev✅ Client chạy tại: http://localhost:5173
- Đăng nhập: Nhập tên người dùng (tối đa 5 người cùng lúc)
- Chọn ghế: Click vào ghế để chọn (màu xanh lá)
- Bỏ chọn: Click lại vào ghế đã chọn hoặc nút "Bỏ chọn"
- Giữ chỗ: Nhấn nút "Giữ chỗ" để giữ ghế (màu cam)
- Thả chỗ: Nhấn nút "Thả chỗ" để trả ghế về available
- Đặt chỗ: Xác nhận đặt chỗ (status: reserved, màu xám)
| Màu | Ý nghĩa | Trạng thái |
|---|---|---|
| 🔵 Xám xanh | Ghế trống | available |
| 🟣 Tím | VIP | available (hàng cuối) |
| 🟢 Xanh lá | Đang chọn | selected |
| 🟠 Cam vàng | Đang giữ | held |
| ⚫ Xám đen | Đã đặt | reserved |
- Frontend: React 18, Vite, Socket.IO Client
- Backend: Node.js, Express, Socket.IO
- Real-time: WebSocket via Socket.IO
- Socket.IO client kết nối tới
http://localhost:5000(cấu hình trongclient/src/App.jsx) - Nếu thay đổi cổng server, cần cập nhật URL trong
client/src/socketHandler.js - Tối đa 5 người dùng online cùng lúc
- Ghế được giữ tạm thời khi người dùng disconnect sẽ tự động trả về available
Nhóm phát triển dự án Movie Ticketing System