Mô hình mạng
- Mô hình mạng của Quake 3 là phần thanh lịch nhất của engine, nhấn mạnh rằng trong môi trường tốc độ cao, thông tin không được nhận ở lần truyền đầu tiên thì không đáng để gửi lại.
- Sử dụng UDP/IP và không dùng truyền tải tin cậy của TCP/IP vì nó gây ra độ trễ.
- Ngăn xếp mạng được mở rộng thành hai lớp loại trừ lẫn nhau: mã hóa dùng khóa chia sẻ trước và nén dùng khóa Huffman được tính toán trước.
- Hệ thống ở phía máy chủ nổi bật ở chỗ vừa giảm thiểu kích thước của datagram UDP vừa bù đắp cho sự thiếu tin cậy của UDP.
Kiến trúc
- Phía client khá đơn giản: ở mỗi frame, nó gửi lệnh lên server và nhận cập nhật trạng thái trò chơi.
- Server phải truyền bá trạng thái trò chơi tổng thể đến từng client và phải tính đến việc mất gói UDP.
- Ba thành phần chính: trạng thái trò chơi tổng thể, việc truyền lệnh của client qua Netchannel, và snapshot lưu 32 trạng thái trò chơi gần nhất trong một mảng vòng.
Hệ thống snapshot
- Khi server gửi bản cập nhật cho client, nó luôn sao chép trạng thái trò chơi tổng thể vào slot lịch sử tiếp theo của client rồi so sánh với các snapshot khác.
- Nếu không có snapshot hợp lệ, nó dùng "snapshot giả" để tạo bản cập nhật đầy đủ.
- Khi client xác nhận đã nhận được bản cập nhật trước đó, chỉ bản cập nhật một phần mới được gửi đi.
- Ngay cả khi gói tin bị mất, quy trình vẫn giống như vậy: thông tin chưa từng được nhận trước đó và thông tin mới sẽ được gửi trong một thông điệp duy nhất.
Khả năng chịu đựng trong bộ nhớ và C
- Quake3 so sánh các snapshot mà không cần introspection; vị trí của từng trường được cấu hình trước thông qua mảng và chỉ thị tiền xử lý.
- Sử dụng cấu trúc
netField_t để định nghĩa vị trí và kích thước của các trường, từ đó truyền các khác biệt qua mạng.
Chia nhỏ trước
- Mô-đun NetChannel chia thông điệp thành các khối 1400 byte để gửi, giúp tránh việc router phải phân mảnh gói.
- Việc router phân mảnh rất tốn kém vì ở đầu vào mạng, gói có thể bị chặn, còn ở đầu ra mạng thì phải chờ đủ mọi mảnh.
Thông điệp tin cậy và không tin cậy
- Hệ thống snapshot bù đắp cho các datagram UDP bị mất trên mạng, nhưng một số thông điệp và lệnh vẫn bắt buộc phải được chuyển tới nơi.
- Sự đảm bảo này được trừu tượng hóa thông qua NetChannel.
1 bình luận
Ý kiến trên Hacker News