소셜 멀티 플레이어 브라우저 게임을위한 아키텍처 (백엔드 선택 + 프론트 엔드 선택 [Flash/Silverlight]) [폐쇄

StackOverflow https://stackoverflow.com/questions/638272

문제

온라인 멀티 플레이어 소셜 게임을 개발할 생각입니다. 세계의 공유 상태는 백엔드에 빠르게 무언가를 요구할 것이므로 잠재적 인 솔루션은 다음과 같습니다.

  1. 서버의 빠른 게임 엔진 (예 : C ++) 및 일부 프론트 엔드 언어 (PHP/Python/Ruby)+ Flash

  2. 파이썬의 전체 스택 (트위스트 또는 스택리스 파이썬 사용) + 플래시

  3. .NET (ASP.NET 또는 ASP.NET MVC) + 플래시

  4. .NET + Silverlight

첫 번째는 생산성 관점에서 과잉 일 수 있습니다 (3 가지 이종 층)

NR. 4는 프로그래머의 천국 (모든 층의 일반적인 환경) 일 수 있지만 :

  • 실버 라이트로 그런 것들은 없었습니다. 아마도 모퉁이에 숨어있는 쇼 스토퍼가있을 것입니다.
  • Silverlight 디자이너를 찾기가 어려울 수 있습니다
  • SL Full OO 아키텍처와 비교할 때 플래시 영화/클립 모델이 비판을 받음에도 불구하고 외부 디자이너가 가상 세계의 추가 부분을 설계 할 때 유리하지 않습니까? 그들은 단지 .swf를 준비 할 수 있습니다. 4 프레임에 항목의 4 가지 관점 - SL에서 더 어렵지 않습니까?
  • Silvelight는 일부 게임 기능이 부족합니다 (충돌 감지와 같은)

어떻게 생각해?

편집] 게임 자체는 더 큰 포털의 일부가 될 것이므로 엔진을 일부 웹 프레임 워크와 통합하는 것이 좋을 것입니다.

도움이 되었습니까?

해결책

옵션 2- 스택리스 파이썬 사용 - Eve Online이 사용하는 것입니다.

http://support.eve-online.com/pages/kb/article.aspx?id=128


편집하다

물론 실제 소프트웨어가있을 때까지 합리적으로 잘 수행하는 아키텍처를 만드는 것은 불가능합니다. 따라서 여기의 판단은 단지 유휴 추측입니다.

그러나 다음을 고려하십시오.

  1. 정적 컨텐츠 (.js 파일, .CSS, .png 등)는 네트워크 대역폭을 지배하는 경향이 있습니다. 이를 처리하려면 리버스 프록시 서버 (예 : 오징어)를 사용해야합니다.

  2. 오징어는 어딘가에서 내용을 가져와야합니다. 오징어에 정적 컨텐츠를 제공하는 가벼운 파일 서버를 원합니다. nginx 또는 lighttpd 등. Apache는 이것을 위해 작동하지만 어느 정도는 과도하게 될 수 있습니다.

  3. 동적 컨텐츠 (표시)는 두 가지 형태로 나타납니다.

    • 게임을 지원하는 JSON.

    • 포털을지지하는 HTML.

    이를 위해서는 mod_wsgi 엔진으로 가장 행복 할 것입니다. 아파치는 확실히 이것을한다. ngingnx와 lighttpd도 작동 할 수 있습니다.

    • JSON은 URI 세트가되어야합니다. 휴식은 좋은 디자인 패턴입니다. mod_wsgi를 통해 이들은 스택리스 파이썬을 사용하여 게임 지향 서버에 연결합니다. 프론트 엔드 (예를 들어, Apache)에는이 URI를 필터링하고 게임을 제공하는 MOD_WSGI 데몬으로 라우팅 할 위치, 디렉토리 또는 가상 호스트가 있습니다. 보다 Wekzeug 이것을 만들려면.

    • 당신의 HTML 물건은 또 다른 URI 세트입니다. mod_wsgi를 통해 기존 Python을 실행하는 Django 서버에 연결합니다. 프론트 엔드 (예를 들어, Apache)에는 이러한 URI를 필터링하여 MOD_WSGI 데몬으로 라우팅 할 위치, 디렉토리 또는 가상 호스트가 있습니다.

다른 팁

나는 1 년 동안 Backend 용 Silverlight와 Python을 사용하여 대규모 멀티 플레이어 온라인 게임을 시작했습니다 (실제로 개발을 단순화하기 위해 Silverlight에서 Ironpython을 실제로 사용했습니다).

Silverlight는 이것에 매우 적합합니다. 나는 다른 어떤 것에서 진지한 온라인 게임을하지 않을 것입니다. 그것은 이미 시장의 35%를 보유하고 있습니다. 개발을 마치면 더 이상 중요하지 않을 정도로 높아야합니다. 진지한 게임의 경우 대부분의 사람들은 4MB 브라우저 플러그인을 설치하는 것을 신경 쓰지 않습니다. 작은 소행성 복제를 원한다면 플래시를 사용하십시오.

내가 그것을 끝내야한다면, 나는 서버에 대한 Python을 유지할 것이라고 생각합니다. 왜냐하면 그것은 내가 가장 숙련 된 서버 기술이기 때문에 서버에 대한 Python을 유지할 것이라고 생각하지만, 프론트 엔드에서 C#을 사용하고 데이터를 전달하는 데 JSON을 사용한다고 생각합니다.

내가 줄 수있는 가장 좋은 조언은 다음과 같습니다.

  1. 기존 라이브러리와 코드를 최대한 활용하십시오.
  2. 성능에 대해 조기에 생각하지 마십시오

가장 어려운 부분은 게임을 마치고, 잘 아는 기술을 사용하며, 코드가 아니라 시간을 최적화하는 것입니다. 바라건대 당신은 내가 할 수없는 일을 할 수 있기를 바랍니다 - 망할 게임을 끝내십시오 :)

편집하다

내가 왜 c#을 사용 해야하는지에 대해 다음을 수행 해야하는 경우 :

Ironpython은 장점과 단점이있었습니다. 서버 및 클라이언트에서 코드 파일 (상수, 모델 등)을 공유 할 수있어서 좋았습니다. 브라우저를 변경하고 브라우저를 새로 고치는 것이 굉장했습니다. 디버깅은 C#만큼 친숙하지 않았습니다.

그러나 어떤면에서는 C#의 2 등석 시민이며, 데이터 바인딩은 작동하지 않았으며 XAML에서 Ironpython 클래스를 사용할 수 없습니다. 로딩 시간은 문제 였으므로 실제로 배경 스레드에서 병렬로 가져 오기 위해 빠른 속도를 높이기 위해 많은 노력을 기울였습니다. XAML이 관련된 두 번째 시민 상태로 인해 템플릿 언어를 사용하여 XAML을 HTML 인 것처럼 생성하는 것처럼 실제로 데이터 바인딩보다 더 잘 작동했지만 Ironpython에서는 Python Template 언어가 작동하지 않으므로 내 자신의 글을 썼습니다. 또 다른 시간 싱크.)

공유 모델을 활성화하려면 나 자신의 ORM을 작성해야했습니다. 그것은 충분히 쉬웠습니다. 그러나 양도하기 위해 나는 JSON을 통과하고 Ironpython과 Python 사이에서 작동하는 최적화 된 이진 형식을 만들었습니다. 또 다른 시간 싱크였습니다.

가볍게 내려서 나는 그 모든 토끼 흔적에 의해 산만 해지지 않았을 것입니다.

Twisted는 이러한 목적으로 성공적으로 사용되었습니다. Asynchronius를 기반으로하는 것은 지속적인 연결이 필요한 응용 프로그램에 매우 효율적입니다. 또한 플래시와 함께 사용할 수있는 멋진 RTMP 구현이 있습니다. Chestpark를 확인하십시오. Twisted로 제작되었습니다.

http://www.chesspark.com/

또한 게임 엔진이 실제로 C/C ++에있을 필요는 없습니다. 게임의 복잡성과 유형에 따라 다릅니다. 그러나 Pygame 라이브러리도 꽤 좋습니다.

개인적으로 나는 당신이 Silverlight를 사용하지 못하게 할 것입니다. 플래시 플러그인은 훨씬 더 잘 채택되어 있으며, 특히 비 MS 운영 체제에서 미래에도 계속 될 것입니다. 이것을 마음에 새기지 말고 나는 당신의 게임을보기 위해 Silverlight를 설치하지 않을 것입니다.

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