Netcode là gì?
Với các game online thời gian thực thì điều quan trọng là gì
– Việc phản hồi tức thời với mỗi input của người chơi
– Đồng bộ trạng thái giữa các người chơi trong 1 phòng
Trạng thái ở đây có nghĩa là thể hiện của bàn chơi tại 1 thời điểm nào đó, bao gồm những thứ như vị trí, máu, trạng thái của nhân vật, đạn, tài nguyên trên bản đồ….., các Game event như collision, check hit, spawn projectile … được tạo ra từ input của người chơi, NPC hoặc từ cơ chế của gameplay.
Tuy nhiên do vấn đề hoặc sự cố về đường truyền, trong 1 ván đấu sẽ có người nhận được gói tin về trạng thái của ván chơi chậm hơn các người khác, điều này dẫn đến việc người chơi đó sẽ gặp bất lợi, không công bằng do vậy State/Event cần phải được đồng bộ giữa tất cả các người chơi, có nghĩa là cần phải có 1 cơ chế nào đó giảm tối đa sự ảnh hưởng của vấn đề mạng mẽo.
Việc chúng ta đồng bộ trạng state/event, giải quyết vấn đề về độ trễ, package lost, giới hạn về băng thông được gói gọn vào thuật ngữ “Netcode“. Hình dưới minh họa cấu trúc của netcode khi hoạt động
Các yếu tố ảnh hưởng đến độ trễ
Trong thực tế, sẽ gần như không bao giờ có trường hợp gói tin được truyền từ A đến B ngay lập tức, luôn mất 1 khoảng thời gian, đó gọi là độ trễ: latency. Nếu latency đủ lớn và không có cơ chế để xử lý thì tại 1 thời điểm nào đó, game state ở máy của những người chơi trong 1 phòng sẽ không giống nhau, với những game đòi hỏi độ chính xác cao như CSGO hoặc PUBG thì hậu quả là bắn toàn hụt và chết khi chưa nhìn thấy địch :v
Vậy thì những yếu tố nào gây ra độ trễ?
Có 3 yếu tố chính:
1. Giới hạn của tốc độ ánh sáng: Tín hiệu không thể di chuyển nhanh hơn tốc độ ánh sáng cho dù đường truyền của bạn có xịn đến mức nào đi chăng nữa. Ví dụ từ VN qua Mỹ đường chim bay ~16000 Km, SpeedOfLight = 299 792.458 Km/s thì mất 53ms.
2. Tất nhiên không có đường mạng nào nối thẳng từ máy chúng ta sang Mỹ, ở giữa sẽ có các thành phần trung gian như các phần mềm xử lý tín hiệu, các thiết bị phần cứng, đường truyền (ánh sáng truyền trong sợi thủy tinh chậm hơn 30% so với trong chân không)… mỗi thành phần đó sẽ góp phần làm tăng độ trễ lên và lúc này độ trễ của chúng ta sẽ ~100ms
3. Phụ thuộc vào giao thức truyền tin: với giao thức TCP khi gói tin được truyền đi thì bên nhận cần gửi lại 1 xác nhận là đã nhận thành công, nếu bên gửi không nhận được xác nhận thì sẽ thực hiện gửi lại gói tin. Như vậy lúc này thời gian truyền tin có thể x2 lên😞
Tổng 3 yếu tố trên lại với trường hợp xịn nhất thì ping (thời gian đi và về của 1 gói tin) của 1 game thủ VN chơi game server Mẽo sẽ đâu đấy tầm ~200ms. Đây là ping của máy nhà mình sang 1 host nào đó bên Mẽo.
Phần tiếp theo sẽ tìm hiểu về các cách mà người chơi có thể kết nối với nhau trong trường hợp có hoặc không có game server.
1 bình luận
[…] theo phần 1, trong phần 2 sẽ trình bày về các cách mà người chơi kết nối và chơi game […]