2010-02-22 3 views
1

Java로 온라인 MMO를 만들려고합니다. 그것은 당신이 캐릭터를 얻고 탑 - 다운 2D로 주위를 돌아 다니며 다른 플레이어들을 쏠 수있는 간단한 것입니다. 서버는 멀티 스레드 및 자바로 구성되며 클라이언트는 Java로도 구성됩니다. 클라이언트는 모든 사용자 입력을 서버에 보내고 서버는 모든 논리 (플레이어, 적 등의 움직임)를 처리하고 위치를 클라이언트에 다시 보냅니다. 어쨌든 모든 적과 플레이어의 위치에 대한 모든 정보를 클라이언트에게 전달하는 가장 좋은 방법은 무엇입니까? 모든 데이터를 객체에 넣고 직렬화하여 소켓에 쓰고 클라이언트 측에서 직렬화를 해제하는 것이 가장 좋은 방법일까요?Java MMO로 클라이언트에 데이터 받기

+5

서버 핸들이 * all * MMO 게임의 논리가 쉽게 확장되지 않습니다. 일반적인 온라인 게임 아키텍처에 대한이 책의 멋진 장 (아름다운 아키텍처) : http://oreilly.com/catalog/9780596517984 –

+0

멋진 책 추천 @tom! – Chii

답변

4

일반적으로 당신은 2 가지 방법으로 업데이트를 보내

  1. 당신은 정기적으로 필요할 때마다 그러한 주체의 위치로 빠르게 변화하지만 덜 중요한 상태를 방송
  2. 당신은 전송 (예를 들어, 두 번째 여러 번.) 중요한 이벤트가 발생할 때 알림을 보냅니다.

서버에서 데이터를 serialize하고 클라이언트로 보내는 것은 문제가되지 않지만 필요한 것만 보내고 필요한 것보다 큰 데이터 형식은 사용하지 마십시오. 앞으로는 더 뛰어난 성능을 갖춘 타사 직렬화 라이브러리를 고려해야 할 수도 있습니다. 그러나 이제는 그럴 수 없습니다. 전송하는 객체가 어떤 식 으로든 형식을 변경하면 수행 할 작업을 고려해야합니다. 늙은 고객을 망칠까요?

서버의 주요 작업 중 하나는 메시지를 정말로 필요한 사람들에게만 보내도록하는 것입니다. 이것은 일반적으로 최소 거리 확인에 의해 수행됩니다. 또한 뭔가 보낼 필요가 있는지 확인할 수 있습니다. 엔티티가 지난 시간 이후로 이동하지 않았다면 다시 위치를 브로드 캐스팅 할 필요가 없습니다.

서버와 클라이언트는 다른 문제입니다. 전송 된 개체를 맹목적으로 deserialize하면 해커가 당신에게 고통의 세계를 유발할 수 있습니다. 처음부터 보안을 계획하십시오. 클라이언트가 쉽게 확인하고 확인할 수있는 간단한 데이터를 보내고받을 것으로 의심되는 것을 버리십시오.

관련 문제