2013-10-25 19 views
0

특정 문제가 있습니다. 서버와 클라이언트간에 통신하는 데 RMI를 사용하고 있습니다.RMI : 직렬화 가능 및 원격 객체

public class RemoteMap 
    extends java.rmi.server.UnicastRemoteObject 
    implements RemoteMapInterface { 

private TreeMap<String, GeneralSprite> sprites; 
... 

이것은 내 원격 개체입니다. 그러나 클라이언트가이 객체의 내용을 변경할 수있게하고 싶습니다. 그리고 변경 후 서버는이를 기반으로 일부 작업을 실행할 수 있습니다. 클라이언트 측에서

예 :

map = (RemoteMapInterface) (registry.lookup("map")); 
map.getSprites.get("object1").setDx(-1); 

나는 GeneralSprite에 serialiable를 사용하고 있지만, 나는 그것이 값에 의해 전달 같아요. 따라서 GeneralSprite에서 일부 변경을 수행하면 서버로 전송되지 않습니다. GeneralSprite를 Remote 객체로 만들어야합니까? 또는 심지어 가능합니까?

미리 감사드립니다. 나쁜 영어로 죄송합니다. 이해해 주시기 바랍니다.

답변

0

직접 또는 간접적으로 Remote 인터페이스를 구현하지 않는 모든 것은 원격 메소드 호출을 위해 직렬화됩니다. 그래서 그것은 "call-by-copy"행동입니다. Remote을 구현하는 새로운 Map을 구현할 수 있지만 RemoteMapInterfacesetDx(String spriteName, int value)과 같은 메소드를 추가하고 서버 측에 sprites.get(spriteName) .setDx(value);으로 구현할 수 있습니다.

+0

감사합니다. 드디어 귀하의 도움으로 문제를 해결할 수있었습니다. 그러나 결국에는 RMI를 사용하지 않을 것이라고 생각합니다. 게임을 개발 중이므로 실시간으로 서버를 업데이트해야합니다. RMI가 최상의 솔루션이 아닌 것처럼 보입니다. 어쨌든 대답 주셔서 감사합니다 :) – Aksirba

+0

Remote *를 구현하지 않거나 현재 내보내지지 않은 것은 모두 * 직렬화됩니다. – EJP