Hiện tại chỉ có cách 2: Client gửi input và server tính toán gửi lại vị trí cho các players là khả thi nhất thôi em ạ.
Với cách 1, thì client sẽ gửi liên tục vị trí lên server sẽ gây ra các vấn đề:
- Server nhận quá nhiều yêu cầu đồng thời khiến nó không đủ khả năng xử lý hết tất cả các request, nó giống như 1 cuộc DDoS tập thể ấy em, làm cho server có khả năng từ chối dịch vụ phần lớn các request gửi lên server. Em cứ tưởng tượng một giây em gửi 10 request đồng bộ vị trí lên server thì với 1000 nghìn user thì 1 giây sẽ có 10,000 request server phải xử lý, càng nhiều user vấn đề càng nghiêm trọng.
- Giữa server và client nó có độ trễ, nên dữ liệu client gửi lên là không đáng tin cậy, vậy nên trên server vẫn phải giả lập môi trường, vậy thì vị trí client gửi cho server tự nhiên lại không có nhiều ý nghĩa.
Với cách 2, thì:
- Số lượng request gửi lên server sẽ ít hơn và dữ liệu cũng ít phức tạp hơn, ví dụ client chỉ gửi hành động user click chuột thôi nó rất nhẹ nhàng.
- Server thông qua hành đồng user gửi lên vẫn có thể giả lập và gửi được trạng thái mới cho client được.
Mấu chốt vấn đề ở đây là phải giảm được số lượng request mà server cần phải xử lý, nên giải pháp nào càng giảm được số request xuống tối thiểu thì đó là giải pháp tốt nhất em ạ.
Bổ sung thêm là có thể giới hạn vùng thấy được (Fog of war), chỉ có những ai di chuyển trong vùng này nhận thì người chơi nhận được update về location thôi, càng nhỏ càng đỡ tốn
Tuy nhiên cái này cũng chưa giải quyết được cheat/hack đâu, vì để đơn giản tính toán thì chỉ cần quét 3 trục toạ độ xyz để tìm ra location mới nhât của players cần gửi xuống, nhưng như vậy đồng nghĩa là có....xuyên tường nữa.
Chống xuyên tường thì cần giải quyết thêm Geo, line of sight trong mớ ở trên, cái này sợ tốn perf nhiều đó, có thể để client này xử lý Geo cho nhẹ, nhưng phải chịu khả năng hack map.
–
Kiet Thanh Vo
1693230634000