2009-02-28 2 views
3

저는 멀티 플레이어 게임을하기 위해 (비트 토 런트가 파일 용인 것처럼) P2P 시스템을 만드는 방법에 대해 궁금해했습니다. 아이디어는 멀티 플레이어 아키텍처에서 기존 서버를 제거하는 것입니다. 나는 일종의 서버가 통신을 시작하고 세계 업데이트를 보내는 데 필요할 수도 있다는 것을 이해하지만 서버의로드 및 대역폭 압력을 줄이는 방법에 관심이 있습니다.멀티 플레이어 게임을위한 완전/반 자치 P2P 네트워크는 얼마나 실현 가능합니까?

그건 그렇고, 이것은 두 플레이어 체커 게임에서 30 인 이상의 플레이어가있는 FPS까지 모든 크기의 게임에 적용됩니다.

나는 미친가요?

답변

1

나는 똑같은 생각을 해왔다. 분산 시스템이 으로 분산되어 있어야하며 중앙 컨트롤러가 필요하지 않다는 오랜 시간의 편견이 있습니다. MMO 또는 이와 유사한 게임의 문제점은 모든 플레이어가 동일한 "세계"를 볼 수 있어야한다는 것입니다. 당신은 Einstein-ian Relativity와 "동시성"과 비슷한 문제로 끝납니다 - 더 멀리 떨어져있을수록 세계에 대한 당신의 견해가 다릅니다.

일반적으로 해결책은 즉각적인 이웃의 다른 클라이언트 (게이머 공간에서 물리적 공간이 아니라)에서 정보를 전파 할 수 있어야한다는 것입니다. 현지 선수.

월드 서버에서 플레이어를 벡터로 표현하는 대신 "서버"또는 월드 모델을 플레이어별로 사용하는 것이 좋습니다.

0

나는 확실히 전문가는 아니지만, 나에게는 조금 미친 듯이 들린다. 내 경험상 대역폭과 성능 때문에 전용 게임 서버가 필요합니다. P2P를 사용하면 두 가지 모두를 잃게됩니다. 필자의 의견으로는 P2P가 몇 가지 장점이 있습니다. 파일 배포와 연구가 그 중 하나입니다. 그러나이 두 가지는 실시간 데이터가 필요하지 않습니다. 대규모 멀티 플레이어 게임 세상이 있다면 게임 파일을 배포하기 위해 P2P를 사용할 수 있으며, 심지어는 번호 계산을 오프로드 할 수도 있습니다.

잠재적 가능성은 있지만 가능성은 있지만 그 수는 제한적으로 보입니다.

+0

@SkippyFire : Starcraft 및 Age of Empires와 같은 많은 RTS 게임은 P2P이므로 서버를 통과하는 것보다 ** 성능이 ** 더 뛰어납니다! 성능면에서 레이턴시 (이 게임에서 대역폭은 매우 미미함)가 – yairchu

9

큰 문제는 게임의 상태가 지연되거나 지연되거나 게임 상태가 변경되는 것이 아닙니다. 큰 문제는 신뢰입니다.

내가 괴물을 죽였다고 말하면 어떻게 실제로 그것을했는지 확인할 수 있습니까? 제가 실제로 레벨 45인지 어떻게 확인합니까? 전 세계로 순간 이동하지 않았 음을 어떻게 확인합니까? 모든 세부 사항에 대해 서버를 확인할 수는 없다는 것을 기억하십시오 : 우리가 피하려고하는 것입니다!

플레이어를 지켜 보는 플레이어가 필요하고 심지어 속이기 위해 함께 일할 수도 있습니다. 나는 누군가가 신뢰할 수있는 P2P MMO를 언제든지 조만간 개발할 것이라고 생각한다. 다음 게임을 시작 -

1) 분산 마스터 :

+2

+1로 Ralph Koster를 인용하면 클라이언트가 적의 손에 있습니다. –

+0

_Raph_ Koster :-) – dave

1

는 질문에 고려해야 할 여러 가지가있다? 첫 번째 노드는 어디에서 찾을 수 있습니까? 모두가 동시에 P2P 클라이언트를 종료하기로 결정하면 어떻게해야합니까? 세상이 끝나나요?

2) 배역 된 규칙 - 102235 명 중 77 명이 x, y, z에서 괴물을 살해했다는 것을 누가 확인할 수 있습니까? "명령의 수석"과 해킹/치팅에 큰 문제가 나타납니다 ...

3) 대기 시간 - 클라이언트가 모든 데이터를 수신 했습니까? 인터넷이 고장난다면 어떨까요? 또는 LAN 게임에서 하드 드라이브가 죽으면 어떻게 될까요?

나는 P2P 생각이 재미 있다고 생각하지만, 모든 대회에서와 마찬가지로 규칙을 다룰 수있는 "판사"가 필요하다고 생각합니다. 왜냐하면 "익명의 사람들"과 경쟁 할 때 "괜찮습니다 속임수를 쓰다 "라고 생각합니다.

그리드 컴퓨팅의 일부 일종의 방법 일 수도 있지만, 그리드의 일부가 떨어져 나가거나 세계를 렌더링하기에는 너무 느리고 결과를 다시 보내는 경우 다시 생각해보십시오. 그런 다음 우리는 전체 게임을 " 뒤죽박죽 "... = 모두를위한 끔찍한 게임 ... 이것은 이미 마스터 서버가있는 많은 FPS 게임에서 볼 수 있습니다. 네트워크 프로토콜이 지연을 너무 잘 처리하지 못하면 실행중인 사람을 공격하기가 점점 힘들어 지거나 다른 사람이 얼굴을 쏜 채로 나타나게됩니다.

값 비싼 솔루션은 플레이어의 일부 데이터를 더 가까이 가지고있는 "서브 서버"(프록시 게임 서버)를 갖는 것입니다. 이것은 내가 블리자드가 와우 (WOW)와 같이 전세계의 수많은 서버 팜에 액세스해야하거나, 대역폭이있을 때 "서브 서버"로 업그레이드 할 지능적인 "P2P 호스트"를 만들어야한다고 생각합니다. 충분히 크고 충분한 플레이어는 그것의 proxsamity에 가깝습니다. (언제나 그 관점에서 지연을 확인합니다 ...) ... 이제는 가능한 것입니다.이 서브 서버와 메인 gameloop 사이의 라인이 전 세계적으로 끊어지면 어떨까요? 다시? 해피

코딩 인터넷과 일반 문제와 같은 더 많은 :-)

은 LOL ...이 갈 수 ... 그것은 소리 ...!

0

이론적으로는 가능할 수도 있지만 여전히 먼 길입니다.

다른 게시물에서 언급했듯이 주변에있는 다른 플레이어에게만 업데이트를 보장하여 대기 시간을 낮게 유지할 수 있습니다. 이것은 분산 게임에서 수년 동안 수행되었습니다.

데이터 손실은 여러 노드가 각 데이터 조각을 담당하게함으로써 허용 가능한 수준으로 유지 될 수 있습니다.

신뢰 문제와 관련하여 플레이어가 속임수를 밝히기 위해 다른 플레이어에게 "도전"할 수있는 프로토콜을 가질 수 있습니다. 나는. 챌린저는 다른 플레이어 계산의 일부를 복제하여 결과를 비교하도록 요청합니다. 이미 이런 종류의 일을하는 암호화 프로토콜이 있지만, 세부 사항을 알지 못하거나 실제로 실용적인지 여부는 알지 못합니다.

내가보기에 실제 문제는 시스템과 같은 개발할 이유가 거의 없다는 것입니다. 비용이 높아지고 복잡성이 추가되지만 게임 경험 (제품)은 크게 향상되지 않습니다. 돈을 절약하는 활동은 실행 가능한 것보다 많은 돈을 절약해야합니다.