문제

나는 멀티 플레이어 게임을하고 있습니다. 이제 Android 기기를 서버에 연결하는 기술을 선택하려고합니다. Android에서 실행되는 클라이언트가 실행되며 게임은 MMORPG입니다. Java에 서버를 작성하고 싶습니다. 지금 당장 나는 그것에 대한 3 가지 아이디어 만 가지고있다 :

1) 일반 Java 및 소켓으로 다중 스레딩 환경을 만드는 것. 이러한 방식으로 게임 클라이언트와 서버간에 전이중 연결을 더 쉽게 수행 할 수 있습니다. 그러나 나는 다음과 같은 우려를 가지고있다 :

1.1) 게임은 많은 수의 객체가있는 MMORPG이며, 동시에 5000 명의 사람들이 재생되는 경우 해당 솔루션이 어떻게 확장되는지 모르겠습니다. Java 시스템에서 얼마나 많은 스레드를 실행할 수 있습니까? 대략 계산할 수 있습니까? 1 개의 스레드가 각 소켓에 대해 읽고 있고 1 개의 스레드가 소켓에 쓰는 경우 (1 개 플레이어의 2 개의 스레드)

1.2) 플레이어 수가 커지면 여러 서버를 배포하기 위해 자체 작성 Jar-Archive를 어떻게 확장 할 수 있습니까? 그 일을하는 특별한 트릭이있을 수 있습니까?

1.3) 많은 프로그래밍 오버 헤드 - 소켓 API는 상당히 낮습니다.

2) HTTP 요청을 지원하기위한 서블릿 인터페이스를 만드는

2.1) 각 플레이어가 자신의 세션을 가지고있는 한 세션 (및 권한 부여)을 쉽게 제어 할 수 있습니다.

2.2) Java EE EJB 또는 뭐든간에 연결할 수 있습니다 - 시스템 수준 프로그래밍을 사용하여 많은 합병증이 제거됩니다. 그래서 나는 사업 논리 작성에 집중할 수 있습니다.

2.3) HTTP - 모바일 장치 + 브라우저를 사용하여 모든 유형의 클라이언트를 제공 할 수 있습니다.

2.4) 고속 - 심지어 1 개의 서블릿 컨테이너는 초당 수천 개의 요청을 제공 할 수 있으므로 정말 빠릅니다.

2.4) 그러나이 접근법은 전이중 통신을 제공 할 수 없습니다. 업데이트를 확인하기 위해 1 초마다 요청을 보내야합니다. 1 초 지연은 게임에 많은 차이가 없지만 여전히 많은 트래픽을 생성합니다. 많은 선수가 재생되는 경우가 발생할 수 있습니까? 몇 가지 혜성 기술에 대해 들었지만 서버가 많은 메시지를 행에서 밀어야하는 것처럼 보이는 것처럼 보입니다.이 기술은 아직 잘 정립되지 않아도 요청을 보내야합니다.

3) 소켓 작성 및 JMS를 통해 JMS를 통해 JMS를 통해 연결하십시오.

3.1) 클라이언트와 서버 간의 전이중 통신을 허용하기 때문에 Java EE의 모든 멋진 기능을 제공하므로 멋지게 냉각시킬 수 있습니다. Servlet 인터페이스를 통해 브라우저로 확장 될 수 있습니다.

3.2) 어떤 종류의 지나치게 보입니다. 사람들이 그 일을 어떻게 할 것인가? 나는 그것이 정확한 방법이라는 것을 의미합니까? 모든 제정신 개발자는 그런 식으로합니까?

나는 당신이 선택한 것을 돕고 싶습니다. 나는 그런 일을하는 일에 많은 경험이 없다. 모범 사례를 고수하고 싶습니다.

도움이 되었습니까?

해결책

왜 당신이 선반에서 벗어날 수있는 것을 다시 작성합니까?

reddwarf server (이전 사용하지 않습니다. / project_darkstar "> 프로젝트 다크 스타 )?

RedDwarf Server는 대규모 멀티 플레이어 온라인 게임의 서버 측을 개발하기위한 오픈 소스 미들웨어 솔루션입니다. Project DarkStar의 공식 커뮤니티 포크 인 Open Source Project는 Sun Microsystems에서 지원하고 관리합니다. - Reddwarf의 위키 피디아 기사

reddwarf의 도메인은 오늘 (2013-06-12)이지만 여전히 Wiki 가 있습니다. github repo 로 마이그레이션하십시오.

reddward는 다음과 같이 철학과 목표를 제시합니다 :

  • 게임 개발자에게 투명한 방식으로 서버 측 게임 코드를 신뢰할 수 있고 확장 가능하고 지속적이며 내결함성을 유지합니다.
  • 는 개발자에게 간단한 단일 스레드 이벤트 중심 프로그래밍 모델을 제공합니다. 개발자는 다른 이벤트 처리 코드 간의 상호 작용으로 인해 개발자가 자신의 코드가 실패해서는 안됩니다. ( reddwarf 튜토리얼 )

서버 코드가 단일 스레드임을 의미하지는 않지만 게임 개발자의 관점에서 추상화됩니다. reddwarf 튜토리얼 reddwarf가 훨씬 더 많은 정보를 제공합니다 많은 설계 결정을하고 명확히합니다.

사용자에 대한 하나의 관심 지점은 다중 노드 능력이 지난 번에 확인 (CA. 2011)

스크래치

학습 경험을 가치있는 경우, 당신이 처음부터 이러한 것들을 처음부터하는 것을 시도하지 못하게해서는 안됩니다. 그러나 이것은 중요한 노력이며 차이가 오히려 시간이 많이 걸릴 것입니다.이 문제는 기술적 인 스택에서 다소 낮은 수준이며 코드의 복잡성을 크게 늘릴 것입니다. 'LL은 유지해야합니다.

그러나 어쨌든 3 가지 옵션에 관해서는 집에서 만든 구현을 위해 가야한다면 첫 번째가 가장 좋은 것처럼 보입니다. 옵션 2 (HTTP 서블릿 사용)는 일부 게임에 대해서만 적용되는 것처럼 보이지만 미들웨어에 여전히 위임하는 동안 자신을 구현하는 것이 상대적으로 적절한 대안이 될 수 있으며로드를 처리하기위한 많은 웹 서버 추가의 혜택을 누릴 수 있습니다 ( 캐시 모듈 등 ...). 옵션 3 (JMS + JEE 사용) 실제로는 지나치게 보입니다. 그러나 당신이 염두에 두지 않고 확실히 알기가 어렵습니다.

및 배우려고 노력하는 경우 분명히 옵션 1이 많은 땅을 덮을 것입니다. 그러나 그것은 오히려 오르막 전투가 될 것입니다.

다른 팁

1.1) you can't think in term of one Thread by user. Depending of machine configuration but you could load thousands of threads but it will not scale and lose a lot of time in Thread context switch. Better think NIO Netty like framework with few incoming and outcoming Thread pool executor that perform incoming messages under milli second execution.

1.2) You can simply scale by putting in front of you game server a loadbalancer component that can forward incoming player to right server according their load

1.3) NIO can handle thousands to to millions connection on a single box. Don't worry with this.

2.1) Manage your player sessions and 2.2) be away of EJB architecture. It will eat all your box power instead of allocating power to your game which is your goal.

2.3) HTTP can serve all clients but if you run realtime game i encourage to use binary socket and keep HTTP only for loadbalancing , login , stats and fallback when can't establish a socket connection.

2.4) Socket based server can handle hundred thousands incoming message per second. This is the property of low latency system

While it's very interesting to dive in building such system. What is your goal? Learn to build such system or succeed your game?

Many java multiplayer game server technology framework already exist. SmartFox Server, ElectroTank...

We have our own java high load Nuggeta multiplayer crossplatform java game server that addresses all points discussed above and much more. If you wanna try it it's free.

If your goal is to write a game server it's awesome venture that can takes long time but very exciting. If your goal is to succeed your game. Pick up among Java game server SDK already existing.

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