온라인 멀티 플레이어 게임 기본 사항


9

현재 ac # 온라인 멀티 플레이어 게임을 실시간으로 진행하고 있습니다. 목표는 UDP 프로토콜을 사용하여 클라이언트 / 서버 기반 연결을하는 것입니다. 지금까지 플레이어의 움직임에 UDP를 사용하고 이벤트 (플레이어 슈팅, 플레이어의 생명을 잃음)에 TCP를 사용했습니다. 그러한 데이터가 서버에 연결된 모든 플레이어에 도착해야하기 때문입니다. 나는 UDP가 '믿을 수 없다'고 말하고 일부 패킷이 손실 될 수 있음을 알고 있습니다. 그러나 TCP와 UDP는 절대로 연결에 영향을 줄 수 있으므로 절대로 읽지 않았습니다.

주요 질문은 네트워크를 어떻게 구성해야 하는가입니다.

UDP는 연결이 없습니다. 누가 누구인지 어떻게 저장해야합니까? 클라이언트의 IP 주소를 목록에 저장해야합니까?

중요한 이벤트에 TCP를 사용하거나 UDP를 사용해야합니까? UDP를 사용해야하는 경우 데이터가 손실되지 않도록하려면 어떻게해야합니까?

TCP와 UDP를 모두 사용하여 각 플레이어의 IP를 목록 (UDP의 경우)과 다른 목록 (UDP의 경우)으로 연결된 TcpClient에 저장해야합니다. 더 효과적으로 변경하려면 어떻게해야합니까?


@JoshPetrie이 질문은 합법적입니다. "주된 질문은 네트워크를 어떻게 구성해야합니까?"입니다. 내가 이것이나 저것을 사용해서는 안됩니다. OP는 하나를 사용하며 이미 선택한 다른 기술을 추가하는 것에 대한 조언이 필요합니다. 어떤 기술을 사용해야하는지에 대한 대답은 없지만 파이프의 팽창을 피하고 지연을 줄이고 기본 기술과 독립적으로 신뢰성을 높이기 위해 소프트웨어를 구성 할 수있는 방법에 대한 답변은 광범위합니다.
코요테

너무 넓습니다. 질문은 더 많은 주제에 맞게 편집되어야하고 (이것은 아주 오래되었습니다) 다시 열 수 있습니다.

답변:


6

UDP는 오버 헤드가 적지 만 패킷을 몰라도 패킷을 잃는 비용이 발생합니다 (TCP를 사용한 오버 헤드의 일부는 손실 된 패킷이 재전송되도록합니다).

그러나 UDP를 사용하는 데있어 큰 문제는 많은 관리자가 DNS를 제외하고 모든 UDP 트래픽을 차단하는 사이트가 많기 때문에 보안 관행이 좋다고 생각하기 때문입니다.

또한 모든 플레이어가 서로 다른 IP 주소를 가지고 있다고 가정하지 마십시오. 여러 사용자가 동일한 인터넷 연결을 공유하는 상황이 많이 있으며, 학교 아이들이 게임에 매료되면 아마 그들이 수업 중에 작업을 수행하는 대신 설치하고 실행하는 방법을 알아낼 것입니다 (그리고 다른 사람 대신 게임 에서이 소중한 시간을 보내고 있지 않습니까?).

TCP 스트림이 열리면 여전히 효율적입니다. 다음 단계는 전송 / 수신하는 데이터의 양을 최소화하는 것입니다. 프로토콜 설계가 시작됩니다. 예를 들어, 동일한 명령을 수백 바이트의 XML 코드로 래핑하는 대신 각 명령에 대해 몇 바이트 (예 : "앞으로 이동")를 보내면 전체 네트워크 대역폭 소비가 줄어들고 CPU주기가 줄어 듭니다. 정보를 처리하는 데 필요합니다 (몇 바이트를 쉽게 비교하고 해석하고 구문을 확인하는 것과 비교할 수 있습니다).

여러 TCP 스트림을 열어서 명령, 그래픽 전송, 오디오 기반 채팅 등의 다른 목적으로 사용할 수 있습니다. 5-10 개의 큰 그래픽을 전송하는 경우 다운로드하는 데 몇 초가 걸리면 플레이어 명령 이동이 다른 스트림에 있기 때문에 지연되지 않습니다 (그리고 새로운 스프라이트가 다운로드를 완료 할 때까지 기본 스프라이트를 표시 할 수 있습니다. 대기하는 것보다 항상 더 재미 있습니다).


1
원래 질문에 클라이언트-서버 모델이 언급되었으므로 모든 UDP를 차단하는 "사이트"는 관련이 없습니다. 그것은 클라이언트의 문제이며 많은 클라이언트가 실제로 모든 UDP를 차단하는지 의심합니다. "TCP를 사용하는 것은 네트워크 게임을 개발할 때 발생할 수있는 최악의 실수입니다. 이유를 이해하려면 TCP가 실제로 IP 위에서 무엇을하고 있는지 모든 것을 그렇게 단순하게 보이도록해야합니다!" 참조 gafferongames.com/networking-for-game-programmers/udp-vs-tcp
indeed005

@ indeed005 : 이것에 대한 장단점이 있습니다-UDP는 확실히 성능 이점을 제공하지만 신뢰성이 떨어집니다 (TCP가 이점이있는 곳). UDP 차단에 관해서는 클라이언트 문제에 대해 절대 맞습니다. 그러나 많은 기업 및 교육 환경에서 UDP가 보안 문제라고 생각하는 우둔한 관리자가 UDP (포트 53 제외)를 차단했습니다. 따라서 클라이언트가 TCP로 폴백하는 옵션은 최소한 플레이어가 게임을 경험할 수 있음을 의미 할 수 있습니다 (특히 네트워크 대역폭이 충분히 빠를 경우).
랜돌프 리차드슨

@ indeed005 : 또한 TCP와 우선 순위가 낮은 데이터 전송에 UDP를 사용할 수있는 반면, UDP는 고속 작업 측면에 사용될 수 있기 때문에 UDP와 TCP의 혼합 사용도 상당히 수용 가능합니다. IPv6에는 새로운 옵션 (IPv4에서는 제공되지 않음)이있어 연결이없는 상태에서 게임의 실시간 요구를 충족시킬 수 있지만 IPv6 이전에는 시간이 걸릴 것으로 생각합니다 IPv4에 의존하지 않고도 게임에서 활용할 수 있습니다 (불행한 일이므로 현재로서는 IPv4를 최대한 활용하십시오).
랜돌프 리차드슨

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