Kiến trúc: Client-Server

Nền tảng:
3D
2D
Tags:
Architecture
Network
Multiplayer

C# Code

// Đây là một snippet giải thích khái niệm, không phải là code để chạy.

/*
 * KIẾN TRÚC CLIENT-SERVER TRONG GAME MULTIPLAYER
 *
 * Đây là mô hình kiến trúc bắt buộc cho các game online nhiều người chơi.
 * Nó chia ứng dụng thành hai phần riêng biệt: Client và Server.
 *
 * 1. CLIENT (Phía Người Chơi):
 *    - Vai trò: Là ứng dụng game mà người chơi cài đặt trên máy tính hoặc điện thoại của họ.
 *      Client chịu trách nhiệm hiển thị đồ họa, phát âm thanh, và nhận input từ người chơi.
 *    - Logic: Client KHÔNG nên tự quyết định các logic quan trọng của game (ví dụ: "Tôi đã bắn
 *      trúng và gây 100 sát thương"). Thay vào đó, nó gửi hành động của người chơi lên Server
 *      (ví dụ: "Tôi đã nhấn nút bắn tại vị trí X, hướng Y").
 *    - Ví dụ trong Unity: Đây là project Unity mà bạn build ra file .exe hoặc .apk cho người chơi.
 *
 * 2. SERVER (Phía Máy Chủ):
 *    - Vai trò: Là một ứng dụng chạy trên một máy chủ từ xa. Server là "nguồn chân lý" (source of truth),
 *      chịu trách nhiệm quản lý trạng thái của toàn bộ thế giới game và tất cả người chơi.
 *    - Logic (Authoritative Server): Server nhận input từ tất cả các Client, xử lý logic game
 *      (ai di chuyển, ai bắn trúng, ai mất máu), và gửi kết quả cuối cùng trở lại cho tất cả
 *      các Client để họ cập nhật hiển thị.
 *    - Ví dụ trong Unity: Bạn có thể tạo một bản build Unity đặc biệt chạy ở chế độ "headless"
 *      (không có đồ họa) để làm dedicated server. Hoặc sử dụng các framework mạng như
 *      Netcode for GameObjects, Mirror, Photon.
 *
 * 3. LUỒNG GIAO TIẾP (Ví dụ hành động bắn):
 *    a. Client A nhấn nút bắn.
 *    b. Client A gửi một gói tin lên Server: "Player A requests to shoot at direction Z".
 *    c. Server nhận gói tin. Server kiểm tra logic: Player A có đủ đạn không? Có đang trong thời
 *       gian hồi chiêu không?
 *    d. Nếu hợp lệ, Server tính toán đường đạn, kiểm tra xem có va chạm với Client B không.
 *    e. Server xác định Client B bị trúng đạn và mất 20 máu.
 *    f. Server gửi gói tin cập nhật trạng thái đến TẤT CẢ các client trong phòng:
 *       "Player A has shot. Player B's health is now 80."
 *    g. Các Client (A, B, và những người khác) nhận gói tin và cập nhật lại giao diện:
 *       - Hiển thị hiệu ứng đạn bắn từ A.
 *       - Cập nhật thanh máu của B còn 80.
 *       - Phát âm thanh trúng đạn.
 *
 * 4. TẠI SAO PHẢI DÙNG KIẾN TRÚC NÀY?
 *    - Chống Hack/Cheat: Vì Server là nơi duy nhất quyết định logic game, người chơi không thể
 *      tự thay đổi code ở client của mình để có lợi thế (ví dụ: tự cho mình bất tử, one-hit kill).
 *    - Đồng bộ Trạng thái: Đảm bảo mọi người chơi đều nhìn thấy cùng một trạng thái game nhất quán.
 *    - Quản lý tập trung: Dễ dàng quản lý các phiên chơi, dữ liệu người chơi và logic game.
 */

Nền tảng của game multiplayer. Hiểu rõ vai trò của Client (người chơi) và Server (máy chủ), cách chúng giao tiếp và tại sao Server phải là nơi quyết định logic game để chống hack/cheat.

Bình luận (0)

Bạn cần đăng nhập để có thể bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Bài viết liên quan

Sử dụng các dịch vụ đám mây như Firebase Functions hoặc AWS Lambda để chạy code backend cho các tính năng phụ trợ mà không cần quản lý một máy chủ chuyên dụng.

Mobile
Architecture
Network
Backend
Firebase

So sánh các thuật toán sắp xếp như Bubble Sort, Insertion Sort và Quick Sort và khi nào nên sử dụng chúng trong game (ví dụ: sắp xếp bảng xếp hạng).

Algorithm
Architecture
Optimization

Giới thiệu về mẫu thiết kế Dependency Injection (DI) và tại sao nó giúp code của bạn dễ bảo trì, dễ test và giảm sự phụ thuộc cứng (hard dependencies).

Architecture
Design Pattern
Optimization

Hướng dẫn cài đặt và sử dụng Zenject, một framework Dependency Injection phổ biến cho Unity, để quản lý các phụ thuộc trong dự án một cách hiệu quả.

Architecture
Design Pattern
DI
Zenject
Optimization

Một mẫu Singleton cơ bản trong Unity để đảm bảo chỉ có một thực thể của một lớp tồn tại trong game. Hữu ích cho các hệ thống toàn cục như GameManager, AudioManager.

Design Pattern
Singleton
Architecture

Expression Trees là một tính năng C# nâng cao cho phép bạn biểu diễn code dưới dạng cây dữ liệu. Trong Unity, nó mở ra khả năng xây dựng các hệ thống phức tạp như trình tạo truy vấn động, hệ thống AI có thể sửa đổi hành vi tại runtime, hoặc các công cụ editor tùy chỉnh mà không cần sinh mã code mới.

Architecture
Algorithm
Optimization
C#

Một hệ thống kho đồ cơ bản sử dụng ScriptableObject cho dữ liệu vật phẩm và quản lý các ô chứa trong UI.

UI
Gameplay
Inventory
ScriptableObject
Architecture

Một cấu trúc cơ bản để tạo, theo dõi và hoàn thành nhiệm vụ, sử dụng ScriptableObject để định nghĩa nhiệm vụ.

Gameplay
Quest
ScriptableObject
Architecture

Một cấu trúc Finite State Machine (FSM) đơn giản sử dụng enum và switch-case để quản lý các trạng thái khác nhau của AI, như đi tuần, truy đuổi và tấn công.

AI
Architecture
Design Pattern
Gameplay

Một hệ thống linh hoạt cho phép người chơi tương tác với nhiều loại đối tượng (cửa, vật phẩm, NPC, công tắc) chỉ bằng một nút bấm (E) khi ở trong tầm, kèm hiển thị gợi ý trên màn hình.

Interaction
Gameplay
Player
Architecture
Interface
UI