Node.js의 실시간 멀티 플레이어 게임 디자인 원칙


12

필자는 클라이언트 / 서버 게임 내 프로토콜 설계 및 최적화에서 지연 시간 보상 방법 이라는 Yahn Bernier의 2001 년 논문에서 채택한 멀티 플레이어 네트워킹에 대한 Valve 기사를 읽었습니다 . socket.io를 통해 클라이언트에 연결된 node.js 서버를 사용하여 실시간 멀티 플레이어 게임을 만들고 있는데 아래에 설명 된 원칙에 관한 몇 가지 질문이 있습니다.

엔터티 보간

[Interpolation]은 일반적으로 서버 업데이트를 버퍼링 한 다음 간격이 매끄럽게 보간 된 상태로 재생함으로써 발생하는 불안한 동작을 방지합니다. 또한 패킷 손실로 인한 결함을 방지 할 수 있습니다.

클라이언트 측 예측

예측은 서버가 로컬 플레이어의 동작을 확인하지 않고 로컬 플레이어의 동작의 영향을 예측하는 클라이언트의 개념입니다. 엔티티의 예측 상태는 일치 또는 불일치가 감지 될 때까지 서버 명령이 도착할 때 서버 명령에 대해 테스트됩니다.

지연 보상

지연 보상은 명령이 전송 될 때 플레이어가 무엇을 보았는지 확인하기 위해 플레이어의 대기 시간을 사용하여 [사용자 입력]을 처리 할 때 시간을 되 감는 서버의 개념입니다. 지연 보상은 예측과 결합하여 공격자의 관점에서 네트워크 지연을 거의 없애는 지점까지 네트워크 대기 시간을 퇴치하는 데 도움이됩니다.

  • UDP와 마찬가지로 TCP에도 원칙이 적용되며 구현에 차이가 있습니까? 엔티티 보간이 패킷 손실을 막을 필요는 없지만 그에 대한 것임을 알 수 있습니다.

  • UDP와 Node.js를 사용하여 서버와 웹 브라우저간에 통신 할 수 있습니까?

  • 이 논문이 10 년이 넘었 기 때문에이 원칙들이 여전히 사용되고 있거나 다른 기술이 등장 했습니까?

도움을 주시면 감사하겠습니다.


1
일반적인 생각과 달리 멀티 플레이어 게임에는 실제로 UDP가 필요하지 않습니다. 최고로부터 배우십시오. 와우는 TCP를 사용하며 다른 많은 AAA 멀티 플레이어 게임도 그렇습니다. 사람들은 단지 누군가의 조언을 따른 후, 다음 5 개월 동안 나쁘고 느린 TCP 버전을 구현하는 데 소비합니다!
jcora

1
(물론 UDP의 장점을 활용할 수있는 적절한 프로토콜을 개발할 수있는 지식과 자료를 가지고 있다고 확신하지 않는 한)
jcora

1
TCP를 사용하는 AAA FPS 게임은 없습니다. 실시간 업데이트가 필요한 게임에는 너무 느립니다. 그러나 액션 게임을 작성하지 않기 때문에 TCP를 피할 수 있어야합니다.
Brendan Lesniak

@Yannbane WoW가 TCP를 사용한다는 것을 몰랐습니다. 내가 찾을 수있는 것에서 많은 MMO 가하는 것처럼 보입니다. HTML5로 멀티 플레이어 게임을 작성하는 것에 대해 훨씬 더 자신감을 갖게합니다. 감사!
dreta

답변:


6
  • 지연의 영향을 줄이기위한 원칙은 전송 프로토콜에 관계없이 동일합니다. 패킷 손실은 또 다른 주제입니다. 많은 종류의 패킷이 손실 될 경우 다음 업데이트가 이미 진행 중이기 때문에 중요하지 않습니다. 여기서 UPD는 이점이 있지만 특정 패킷이 전달되도록하려면 사용자 지정이 필요합니다. UDP로이를 수행하기위한 승인 코드
  • Node.js는 UDP를 지원하지만 웹 브라우저는 (플러그인없이) 지원하지 않습니다. 둘 사이의 통신을위한 최상의 실시간 방법은 기본적으로 TCP 인 Web Sockets입니다. 그러나 통신을 위해 웹 소켓을 지원하지 않는 브라우저에 폴백을 제공하는 Socket.IO를 사용할 수 있습니다.
  • 원칙은 동일하게 유지됩니다.

1
나는 이것이 구식이라고 생각합니다-WebRTC는 UDP와 같은 통신을 사용해야합니다. 그렇지 않습니까?
Nikolay Tsenkov

4

Sven Bergstrom의 buildnewgames.com 사이트에 게시 된 HTML5의 실시간 멀티 플레이어 게임에 대한이 기사를 확인해야합니다 . 그는 같은 내용에 대해 이야기하고 Node.JS를 사용하고 있습니다. 나 자신과 비슷한 것이 있습니다. 나는 방금 클라이언트 측 예측 및 보간 등에 대해 더 많이 연구하고 있으며 나머지 부분을 다루기 전에.

Socket.IO 및 Node를 사용 하여이 작업을 수행하는 것이 확실히 가능하다고 생각하지만 기술은 여전히 ​​새롭기 때문에 구현에 대한 지침이 거의 문서화되지 않고 거의 없습니다. 나는 내가하고있는 일을하고 주제에 대해 추상적 인 높은 수준의 용어로 매우 자세하게 연구하고 그것을 직접 구현해 볼 것을 권장합니다.


1

나는 기술이 거의 같다고 생각합니다. 또한 개념은 사용하는 언어 또는 UDP 또는 TCP 수행 여부에 따라 달라지지 않습니다. 나는 예쁜 다이어그램을 포함하여 여기 http://www.gabrielgambetta.com/fpm1.html 전체에 대한 매우 자세한 설명을 작성했습니다 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.