Tôi đang tạo trò chơi trực tuyến đầu tiên của mình bằng socket.io và tôi muốn đây là trò chơi nhiều người chơi thời gian thực như agar.io hoặc diep.io.
Nhưng tôi đã gặp phải vấn đề là cố gắng tìm ra cách để làm cho tất cả các máy tính hoạt động với cùng một tốc độ.
Tôi có ba ý tưởng cho các mô hình, nhưng không ai trong số chúng có vẻ đúng, và tôi tự hỏi làm thế nào các trò chơi video bình thường làm điều đó. (Bạn có thể bỏ qua việc đọc ý tưởng của tôi; họ chỉ cho bạn cách để xem những vấn đề tôi gặp phải.)
Máy chủ cho phép các máy khách tự chạy và chuyển các bản cập nhật đến máy chủ, sau đó chúng sẽ phát chúng cho các máy khách còn lại. Điều này có vấn đề là một số máy tính chạy nhanh hơn các máy tính khác, cho phép chúng cập nhật nhanh hơn và di chuyển trên màn hình nhanh hơn.
Có máy chủ báo cho khách hàng biết khi nào cần cập nhật. Sau đó tôi có thể đợi cho đến khi khách hàng cuối cùng phản hồi (một ý tưởng khủng khiếp trong trường hợp một người có máy tính chậm), đợi cho đến khi khách hàng đầu tiên phản hồi (một lần nữa, chờ liên lạc trước mỗi khung hình) hoặc chỉ cần gửi cho họ nhanh nhất có thể (mà dường như gặp vấn đề tương tự như số 1).
Khi bắt đầu trò chơi, hãy để máy chủ thông báo cho khách hàng cách cập nhật nhanh chóng. Điều này có nghĩa là khách hàng sẽ chịu trách nhiệm hạn chế di chuyển trong khoảng thời gian đó. Ví dụ: nếu ai đó bằng cách nào đó quản lý để nhấn một nút hai lần trong khoảng thời gian đó, thì nó sẽ chỉ gửi một sự kiện nhấn nút. Điều này có vấn đề là một số hành động sẽ bị bỏ qua (chẳng hạn như nhấn nút đôi) và tương tác sẽ phụ thuộc vào đồng hồ của máy khách, có thể không khớp với đồng hồ của máy chủ. Sau đó, máy chủ sẽ phải theo dõi từng khách hàng và đảm bảo rằng các cập nhật của họ đang được gửi vào đúng thời điểm.
Tôi đã thực hiện một số nghiên cứu , nhưng các bài báo tôi đọc dường như không đề cập cụ thể việc cần làm nếu khách hàng gửi cập nhật nhanh hơn các khách hàng khác.
Trong trường hợp cụ thể của tôi, tôi đang làm việc với những người có tốc độ bàn phím nhanh hơn (máy tính của họ sẽ gửi nhiều cập nhật bàn phím hơn các máy tính khác).
Làm thế nào để lập trình viên thường đối phó với điều này?