문제

대규모 멀티플레이어 온라인 RPG 게임은 어떻게 제작되나요?

  • 어떤 서버 인프라가 구축되어 있나요?특히 수많은 클라이언트가 연결되어 실시간으로 통신하는 경우에는 더욱 그렇습니다.

  • 페이지 요청 시 실행되는 스크립트로 관리합니까?아니면 백그라운드에서 실행되고 연결된 클라이언트와의 통신을 관리하는 설치된 서비스인가요?

  • 다른 프로토콜을 사용합니까?HTTP는 서버가 클라이언트에 데이터를 푸시하는 것을 허용하지 않기 때문입니다.

  • 수백 개의 충돌하는 게임플레이 이벤트를 중앙에서 처리하기 위해 "엔진"은 어떻게 작동합니까?

시간 내 줘서 고마워.

도움이 되었습니까?

해결책

어떤 서버 인프라를 구축하고 있습니까? 특히 많은 고객이 실시간으로 연결되고 의사 소통을합니다.

서버가 Linux, BSD 또는 Solaris에서 거의 99%의 시간에 실행될 것이라고 생각합니다.

페이지 요청에서 실행하는 스크립트로 관리합니까? 또는 백그라운드에서 실행되고 연결된 클라이언트와의 커뮤니케이션을 관리하는 설치된 서비스?

클라이언트와 대화하는 서버는 데몬 또는 서비스를 실행하는 서버가 연결을 듣고 있습니다. 인스턴스 (Dungeons)의 경우, 일반적으로 각 그룹에 대해 새로운 프로세스가 시작됩니다. 이는 이것 (Threadpool과 유사)이 어딘가에 디스패처 서비스가 있음을 의미합니다.

그들은 다른 프로토콜을 사용합니까? HTTP는 서버가 데이터를 클라이언트에 푸시 할 수 없기 때문입니다.

UDP는 사용 된 프로토콜입니다. 패킷이 수신 될 것이라는 보장이 없기 때문에 빠릅니다. 약간의 대기 시간이 고객이 세계 위치를 잃게하는지 상관하지 않습니다.

"엔진"은 수백 개의 상충되는 게임 플레이 이벤트를 중앙에서 처리하기 위해 어떻게 작동합니까?

대부분의 MMO에는이를 일정량의 사람들에게 제한하는 구역이 있습니다. 한 영역에 100 명이있는 사람들에게는 일반적으로 대기 시간이 높습니다. 서버는 100 대의 주문을 처리해야하며, 각각의 손상 금액을 계산해야합니다. Big Five MMO의 경우 매일 10-20 개의 매우 지능적이고 수학적으로 재능있는 개발자로 구성된 팀이 있으며, 이번 매일 작업을 수행 한 MMO는 아직 100 명의 선수 이후에 대부분 휴식을 취하지 못했습니다.

--

찾으십시오 와우 (공식 사이트가없고 Dodgy 사이트에 링크하고 싶지 않습니다). 이것은 기반입니다 아파이어 코어 이는 MMO 시뮬레이터이거나 기본적으로 WOW 프로토콜의 역 엔지니어입니다. 이것이 개인 WOW 서버가 실행되는 것입니다. 내가 기억하는 바에 따르면 Wowemu는입니다

  • MySQL
  • 파이썬

그러나 Apirecore는 C ++입니다.

Wowemu의 백엔드는 놀랍도록 간단하며 (2005 년에 시도해 보았지만) 데이터베이스 스키마의 단순화에 대한 완전한 단순화 일 것입니다. 그것은 당신에게 관련된 것에 대한 좋은 아이디어를 제공합니다.

다른 팁

많은 도로가 로마로 이어지고 많은 건축물이 MMORPG로 이어집니다.

총알 포인트에 대한 일반적인 생각은 다음과 같습니다.

  • 서버 인프라는 스케일 아웃 기능을 지원해야합니다. 부하가 증가함에 따라 추가 서버를 추가합니다. 그건 그렇고 이것은 클라우드 컴퓨팅에 적합합니다. 저는 현재 연중 시간과 시간에 따라 확장 및 아래로 확장 해야하는 대규모 금융 서비스 앱을 운영하고 있습니다. 우리는 Amazon AWS를 사용하여 가상 서버를 거의 즉시 추가하고 제거합니다.
  • MMORPG는 아마도 통신에 웹 서비스를 사용하지 않을 것입니다 (무국적자이기 때문에)가 아니라 사용자 정의 서버 측 프로그램 (예 : TCP 및/또는 UDP 메시지를 듣는 서비스)입니다.
  • 아마도 사용자 정의 TCP 및/또는 UDP 기반 프로토콜을 사용합니다 (소켓 통신을 살펴보십시오).
  • 대부분의 게임은 "Worlds"로 분류되어 동일한 가상 우주에있는 플레이어의 수를 한 서버 (아마도 많은 CPU 및 많은 메모리 포함)가 합리적으로 처리 할 수있는 게임 이벤트 수로 제한됩니다. 정확한 이벤트 처리 메커니즘은 게임 디자이너의 요구 사항에 따라 다르지만 일반적으로 들어오는 이벤트는 우선 순위 대기열에 들어가기를 기대합니다 (수신 시간 및/또는 시간에 따라 우선 순위가 있으며 아마도 " 우리는이 사건을 무시합니까? ").

이것은 전반적으로 매우 큰 주제입니다. 이 주제를 다루는 책을 Amazon.com에서 확인하는 것이 좋습니다.

MMO는 대체로 개발 및 배포를 위해 비즈니스 리소스를 필요로 하며, 이 시점에서 MMO는 귀중한 회사 IP이므로 구현에 대해 공개적으로 사용할 수 있는 정보가 많지 않습니다.

한 가지 확실한 점은 MMO가 대체로 사용자 정의 클라이언트와 3D ​​렌더러를 사용하기 때문에 웹 브라우저가 아니기 때문에 HTTP를 사용하지 않는다는 것입니다.온라인 게임은 TCP/IP 또는 UDP 위에 구축된 자체 프로토콜을 갖게 될 것입니다.

게임 시뮬레이션 자체는 네트워크로 연결된 3D 게임과 동일한 기술을 사용하여 구축되므로 해당 문제 영역에 대한 리소스를 찾아 자세히 알아볼 수 있습니다.

World of Warcraft의 경우 Blizzard의 구인 목록에서 Oracle 경험을 요구 사항/플러스로 자주 언급하기 때문에 데이터베이스가 Oracle이라고 추측할 수 있습니다.그들은 사용자 인터페이스 스크립팅을 위해 Lua를 사용합니다.C++, OpenGL(Mac용), Direct3D(PC용)는 게임을 만드는 데 사용되는 언어이기 때문에 게임 클라이언트의 구현 언어로 가정할 수 있습니다.

구현에 대해 논의하는 데 멋진 회사 중 하나는 Eve 온라인을 만든 CCP입니다.그들은 Eve의 인프라에 대한 많은 프레젠테이션과 기사를 발표했으며, Eve의 구현 중 많은 부분에 Stackless Python을 사용하기 때문에 특히 흥미로운 사례입니다.

http://www.disinterest.org/resource/PyCon2006-StacklessInEve.wmv http://us.pycon.org/2009/conference/schedule/event/91/

Eve의 아키텍처에 대한 최근 Game Developer Magazine 기사도 있습니다.

https://store.cmpgame.com/product/3359/Game-Developer-June%7B47%7DJuly-2009-Issue---디지털 에디션

소프트웨어 엔지니어링 라디오 팟 캐스트에는 다음과 같습니다 Jim Purbrick과의 에피소드에 대한 에피소드 서버, 세계, 스케일링 및 기타 MMORPG 내부에 대해 논의합니다.

전통적으로 MMOS는 Linux에서 실행되는 C ++ 서버 애플리케이션을 기반으로 Back End Storage를 위해 데이터베이스와 통신하고 OpenGL 또는 DirectX를 사용하여 FAT 클라이언트 응용 프로그램을 기반으로합니다.

많은 경우 클라이언트와 서버는 동작을 더 높은 수준의 언어로 정의 할 수있는 스크립팅 엔진을 포함합니다. Eve는 주로 Python에서 구현되며 대부분 고급 스크립트를 사용하여 C ++가 아닌 Stackless 위에 실행된다는 점에서 주목할 만합니다.

일반적으로 서버는 연결된 클라이언트의 루프 읽기 요청에있어 게임 메커니즘을 시행하기 위해 처리 한 다음 클라이언트에 업데이트를 전송합니다. UDP는 대기 시간과 오래된 데이터의 재전송을 최소화하는 데 사용될 수 있지만 RPG는 일반적으로 Twitch 게임 플레이 TCP/IP를 사용하지 않기 때문에 일반적으로 더 나은 선택입니다. Comet 또는 Bosh는 웹 기반 MMOS 용 HTTP보다 양방향 통신을 허용하는 데 사용될 수 있으며 웹 소켓은 곧 좋은 옵션이 될 것입니다.

오늘 새 MMO를 구축하고 있다면 아마도 XMPP, BOSH 및 클라이언트를 JavaScript로 구축하면 뚱뚱한 클라이언트 다운로드없이 작동하고 XMPP 기반 IM 및 음성 시스템 (GCHAT)과 상호 운용 할 수 있습니다. WebGL이 널리 지원되면이를 통해 브라우저 기반 3D 가상 월드를 허용합니다.

환경이 단일 프로세스에서 시뮬레이션하기에는 너무 커서 일반적으로 세상의 작은 영역을 시뮬레이션하는 프로세스간에 지리적으로 분리됩니다. 종종 세계에 최적의 인구가 있으므로 여러 사본 (파편)이 운영되어 다른 사람들이 사용합니다.

이안 윌크스 (Ian Wilkes)가 운영 책임자 인 세 번째 라이프 아키텍처에 대한 좋은 프레젠테이션이 있습니다. http://www.infoq.com/presentations/second-life-ian-wilkes

Second Life Technology에 대한 대부분의 대화는 내 블로그에서 다음과 같습니다. http://jimpurbrick.com

보세요 Erlang. 동시 프로그래밍 언어 및 런타임 시스템이며 분산, 결함 내성, 소프트 리얼 타임, 비 스톱 애플리케이션을 지원하도록 설계되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top