2011-11-15 2 views
1

두 명의 플레이어가 서로 대결 할 수있는 턴 기반 게임이 있습니다.온라인 게임에 TCP를 사용해야합니까?

이것은 C#으로 작성되었으며 XNA 4.0을 사용합니다.

현재 멀티 플레이어는 TCP/IP로 구현됩니다. 꽤 잘 작동하지만 플레이어가 같은 네트워크 내에 있고 그 중 하나가 다른 네트워크의 IP를 알고있을 때만 가능합니다.

그래서 질문입니다.이 게임에 대해 온라인 게임을 어떻게 구현해야합니까? TCP는 IP 주소와 포트 (또는 기타 기술적 세부 사항)를 다룰 필요없이 세계의 반대편에있는 두 명의 무작위 플레이어를 연결하는 합리적인 방법입니까?

이 문제를 더 어렵게 만들기 위해 게임 매칭 서비스를 호스팅 할 서버가 없습니다. (글쎄, 난 내가 IP를 공유하기 위해 사용할 수있는 가상 웹 서버에 액세스 할 수 있습니다.)

가 질문을 나열하려면 :

  • 합니까 .NET은 TCP에 비해 통신 방법의 더 나은 선택을 제공?
  • 제 경우 NAT를 처리하는 가장 좋은 방법은 무엇입니까?
  • 내 자신의 서버를 가져 와서 거기에 맞는 서비스 인 TCP 게임을 실행할 수있는 저렴한 방법이 있습니까?
+0

분명히 TCP의 팬이 있습니다 ... 이것을 Programmers.SE로 옮기려면 투표하십시오. – Fosco

+1

나는 gamedev가 더 적절하다고 말하고 싶습니다. –

+1

@Fosco 왜 마이 그 레이션합니까? 이것은 사실적인 프로그래밍 답변을 사용할 수있는 문제입니다. – stefan

답변

2

TCP 대 UDP.

TCP는 UDP보다 약간 느리지 만 더 안전합니다.

게임이 턴 기반이므로 클라이언트와 서버간에 최소한의 양의 데이터를 보내고 실제로 지연 시간에 종속되지는 않습니다. TCP에 대해서도 마찬가지입니다.

이 문제를 더 어렵게 만들기 위해 게임 매칭 서비스를 호스팅 할 서버가 없습니다. (글쎄, IP 공유에 사용할 수있는 가상 웹 서버에 액세스 할 수 있습니다.)

플레이어에게 서버 브라우저 또는 유사한 기능을 제공하려는 경우 중앙 집중식 서버 , 이것을 위해 만들어진 스크립트/응용 프로그램이있는 웹 서버는 정상적으로 작동합니다.

  • 내 자신의 서버를 얻고 거기 TCP 게임 매칭 서비스를 실행하는 싼 방법이 있나요?

웹 서버 또는 유사한 호스트가 잘 할 일반적으로 싼 것, 당신이 원하는 것은 : 서버에 대한

아무 문제에서 모든 C#으로 웹 요청입니다 수행하지 요청은 같은 것을 볼 수 있었다

0

Minecraft는 TCP를 사용합니다. 송수신해야하는 트래픽에 좋으며 조금만 대기 할 수 있습니다.

+1

Minecraft는 지독한 코드이므로 예제로 사용하면 안됩니다. –

+5

이것은 TCP를 사용하는 게임 일뿐입니다. 나는 그것에 대해 다른 말을하지 않았다. – dataviruset

2

예상 및 허용되는로드 및 대기 시간의 종류를 지정해야합니다.

일반 답은 실시간으로 게임에 대한

  • - UDP.

  • scrabble-like-games - TCP의 경우.

당신이 말한 것처럼 IP를 공유하기 위해 서버를 사용하십시오.

+0

턴 기반이라면 TCP가 올바르게 작동한다고 말할 수 있습니다. –

+3

@George : 턴 기반 게임의 경우 데이터에 따라 객실에 연결된 웹 서비스 등을 고려할 수도 있습니다. 이렇게하면 IP를 공유 할 필요가 없으며 방화벽을 우회 할 수 있습니다. – stefan

+0

턴 기반 게임으로서 낮은 대기 시간이 우선 순위가 아닙니다. 각 차례의 데이터를 256 바이트로 쉽게 채울 수 있다고 저는 쉽게 말할 수 있다고 생각합니다. 그러나 웹 서비스를 사용해야하는 경우 플레이어가 서버에 메시지를 자주 쿼리해야한다고 말하지 마십시오. DoS 공격으로 표시되는 게임의 위협이 있습니까? – Habba

0

UDP는 단방향 오류 검사입니다. 수신 측에서만 오류를 확인합니다. 이것은 패킷 검사를위한 왕복이 너무 느린 구형 저속 이더넷 기술에서 필요했습니다.

TCP는 핸드 셰이크가있는 매우 신뢰할 수있는 프로토콜입니다. 따라서 송신 측은 데이터가 성공적으로 전송되는지 여부를 알고 있습니다. 그러나 왕복으로 인해 전송에 더 많은 오버 헤드와 지연이 발생합니다.

TCP도 UDP를 사용하지 않는 패킷을 정렬합니다.

일부 게임은 패킷 손실을 신경 쓰지 않습니다 (예 : 개체가 움직이는 "김이 나는"데이터). 어쨌든 패킷의 다음 라운드가 업데이트됩니다. UDP를 사용할 수 있습니다. 그러나 모든 데이터를 얻는 것이 TCP를 사용하는 것이 중요하다면 그렇지 않으면 모든 데이터가 성공적으로 전송되도록 코드를 작성하는 데 많은 시간을 소비하게됩니다.

네트워크가 충분히 빠르며 인터넷이 TCP/IP 인 경우 매우 낮은 지연 트래픽이 필요한 경우를 제외하고는 TCP를 권장합니다. http://www.diffen.com/difference/TCP_vs_UDP

NAT :

이 웹 사이트는 좋은 요약을 제공합니다 (TTL)을 라이브하려면 시간만큼이나 긴 문제가되지 않습니다 충분히 큽니다. NAT를 얻을 때마다 TTL을 하나 씩 빼냅니다. 그것이 0 일 때, 그것은 떨어졌습니다.

+0

올바르지 않습니다. 첫째, UDP는 TCP와 같이 "낮은 수준"이므로 둘 다 전송 계층 프로토콜입니다. 둘째, 둘 다 '체크섬'필드를 사용하여 오류 검사를 제공합니다. –

관련 문제