socket.io를 사용하여 첫 온라인 게임을 만들고 있는데 agar.io 또는 diep.io와 같은 실시간 멀티 플레이어 게임이되고 싶습니다.
그러나 모든 컴퓨터를 같은 속도로 작동시키는 방법을 알아 내려는 문제가 발생했습니다.
모델에 대한 세 가지 아이디어가 있지만 그중 어느 것도 옳지 않은 것처럼 보이며 일반적인 비디오 게임이 어떻게 작동하는지 궁금합니다. (당신은 내 아이디어를 읽는 것을 건너 뛸 수 있습니다. 그들은 단지 내가 겪고있는 문제를 볼 수있는 방법을 제공합니다.)
서버는 클라이언트가 스스로 실행하고 업데이트를 서버에 전달한 다음 나머지 클라이언트에게 브로드 캐스트합니다. 이로 인해 일부 컴퓨터는 다른 컴퓨터보다 더 빠르게 실행되어 더 빠르게 업데이트하고 화면을 더 빠르게 이동할 수 있습니다.
서버가 클라이언트에게 업데이트시기를 알려주도록합니다. 그런 다음 마지막 클라이언트가 응답 할 때까지 (한 사람이 느린 컴퓨터를 가지고있는 경우 끔찍한 아이디어) 기다릴 수 있습니다. 첫 번째 클라이언트가 응답 할 때까지 (다시 말하면 각 프레임 전에 통신을 기다립니다) 가능한 한 빨리 보내십시오 ( 1)과 같은 문제가 발생하는 것 같습니다.
게임을 시작할 때 서버가 클라이언트에게 업데이트 방법을 알려주도록합니다. 이는 고객이 해당 기간 사이의 이동을 제한 할 책임이 있음을 의미합니다. 예를 들어, 누군가가 그 기간 내에 어떻게 든 버튼을 두 번 누르면 관리인은 단 하나의 버튼 누름 이벤트 만 보냅니다. 이로 인해 일부 작업 (예 : 이중 버튼 누름)이 무시되고 상호 작용이 클라이언트의 시계에 의존하므로 서버의 시계와 일치하지 않을 수 있습니다. 그런 다음 서버는 각 클라이언트를 추적하고 업데이트가 올바른 시간에 제출되는지 확인해야합니다.
나는 약간의 연구 를했지만, 내가 읽은 기사는 클라이언트가 다른 클라이언트보다 빠르게 업데이트를 보내는 경우 수행해야 할 작업을 구체적으로 다루지 않는 것 같습니다.
필자의 경우에는 키보드 속도가 빠른 사람들을 상대하고 있습니다 (컴퓨터는 다른 컴퓨터보다 더 많은 키보드 업데이트를 보낼 것입니다).
프로그래머는 일반적으로 이것을 어떻게 처리합니까?