2013-10-25 2 views
0

게임을 개발 중이며 멀티 플레이어 옵션을 추가 할 생각입니다. 그것은 뱀이나 이런 걸 같은 실시간 게임, 그래서 정말 빨리 스프라이트의 위치를 ​​업데이트하고 있습니다 :실시간 자바 게임 : 소켓 또는 RMI

while (isRunning) { 
    ... 
    if (sprite instanceof PlayerSprite) { 
      PlayerSprite player = ((PlayerSprite) sprite); 
      collisionManager.checkCollision(player, map, elapsedTime, currTime); 
      updatePosition(player, elapsedTime); 
      player.animeUpdate(elapsedTime); 
    } 
    ... 
} 

나는 RMI 먼저 시도 : 나는 개체의 모든 위치를 저장하고 난 원격 그것을했다. 따라서 서버와 클라이언트 모두 업데이트 할 수 있습니다. 하지만 내가 말한대로 실시간으로 업데이트해야합니다. 그리고 RMI가 해결되지 않는 것처럼 보입니다. 그러나 나는 초심자이므로, 나는 확실히 모른다.

내 질문은 : RMI 또는 간단한 IO (소켓)가 실시간 게임을위한 최상의 솔루션이 될 것입니까?

소켓이 더 좋은 경우 ObjectOutput/ObjectInput을 통해 위치 저장 객체를 클라이언트에 보내고 객체를 업데이트 한 다음 (화면에 그려서) 서버에 업데이트 된 객체를 다시 보낼 수 있습니까?

미리 감사드립니다. :)

답변

2

제 질문은 : RMI 또는 간단한 IO (소켓)가 실시간 게임을위한 솔루션이 될 수 있습니까?

이 질문은 대답하기에 충분합니다. 둘 사이에는 소켓이 있습니다. RMI에는 상당한 양의 오버 헤드가있어 전송 시간이 느려집니다. 실시간을 목표로하는 것은 정보를 보내고받는 시간을 가능한 한 짧게하는 것입니다.

소켓이 더 나은 경우 : 나는 개체를 업데이트 (및 로 화면을 그릴) 서버에 업데이트 된 개체를 다시 보내 다음과 클라이언트에 ObjectOutput에/ObjectInput는을 통해 위치 저장 객체를 보낼 수 및 등등?

이미 언급했듯이 느릴 수 있습니다. 클라이언트 - 서버 메시징 시스템 (나는 Kryonet을 사용)이있는 라이브러리를 사용하거나 자신의 프로토콜을 작성해야합니다. 명백하게 보일지도 모르는 중요한 점은 클라이언트와 서버가 서로를 쉽게 이해할 수 있다는 것입니다.

+1

KryoNet에 대한 링크에 많은 감사드립니다! –

+0

고마워, 좋아 보인다. 먼저 간단한 소켓으로 시도해 보겠다. 나는 그것에 익숙하다. 그럼 나는 Kryonet에게 기회를 줄 것이다 :) – Aksirba

1

소켓이나 RMI를 사용하지 않겠습니다.

제 생각에는 멀티 플레이어를 처리하려면 REST 서비스와 함께 가야합니다.

+0

그것에 대해 들어 본 적이 없습니다. 튜토리얼을 게시 할 수 있습니까? 나는 웹 서비스를 보지 않겠습니까? – Aksirba

1

속도면에서 자바 직렬화를 it is much slower than JSON serialization으로 사용하지 마십시오.

JSON is fine 개인적으로는 공부가 필요하지만 개인적으로는 Google 프로토콜 버퍼를 사용하는 Akka Remote Actors을 시도합니다.

+1

수정 : Akka는 원격 프로토콜에 ProtoBuf를 사용하지만, 원하는대로 사용자 수준 메시지를 직렬화 할 수 있습니다. –