프로토 타입으로 저는 자바 스크립트와 웹 소켓을 사용하여 캔버스에 멀티 플레이어 페인트 게임을 만들고 있습니다. 조건은 서버가 어떤 방식 으로든 캔버스를 생성 할 수 없다는 것입니다. 모든 모델 논리는 클라이언트 측에서 발생합니다.신뢰할 수있는 서버없이 네트워크 아키텍처를 만드는 방법
1) 입력이 클라이언트 측에서 발생하면이 서버로 전송 및 저장됩니다
는 지금은 다음과 같은 설정이있다. 서버는 매우 간단한 유효성 검사를 수행합니다.
2) 15ms마다 (서버에서) 모든 입력이 클라이언트로 보내지고 지워집니다. 클라이언트는 입력을 로컬로 렌더링합니다.
3) 각 200 밀리 각 클라이언트가 "올바른"버전
4) 모든 200 MS 서버 표를 저장하는 서버에 캔버스의 자신의 버전을 전송하고 클라이언트에 백업 보낼 어디 그들의 캔버스를 업데이트하십시오. 올바른 버전은 타임 스탬프와 함께 서버에 저장됩니다.
5) 새 클라이언트가 연결되면 서버에서 최신 버전의 캔버스를 가져옵니다.
이 접근법은 지속 상태가있는 멀티 플레이어 페인트를 제공하지만 몇 가지 문제가 있습니다. 적절한 버전은 무엇이며 어떻게 투표합니까? 클라이언트가 10 초 동안 지연을 경험하고 버전을 보내면 어떻게됩니까? 또한 각 클라이언트가 지속적으로 로컬 변경을 수행하는 경우 각 클라이언트의 캔버스가 완전히 동일하지 않으므로 불가능합니다. 캔버스의 올바른 버전을 찾으려면 서버에 보낼 때 모두 다르기 때문입니다.
질문은 다음과 같이 요약 할 수 있습니다. 클라이언트가 모든 로직을 수행하고 서버가 입력이 유효한지 만 확인하는 신뢰할 수있는 클라이언트 - 서버 아키텍처를 만들 수 있습니까? 네트워크 트래픽이 더 많이 발생하더라도 그리고 그렇다면, 좋은 승인은 무엇입니까?
아마도 클라이언트는 항상 15ms마다 입력과 함께 캔버스를 보내야합니다. 서버는 ~ 200ms마다를 제외하고 대부분의 시간 동안 캔버스 데이터를 삭제 한 다음 캔버스 버전을 저장합니다. 이것은 트래픽로드를 상당히 증가시킵니다. – xCander