멀티플레이어 게임 프로그래밍 - 5장 연습문제

jh Seo·2023년 4월 13일
0
  1. 객체 직렬화 데이터 이외의 중요한 세 가지 값은
  • 해당 패킷에 객체 상태를 담은 패킷이라고 표시하기
  • 객체에 고유 식별자 부여하기
  • 리플리케이션할 객체의 클래스를 식별하기
  1. 네트워크 코드가 게임 코드에 종속된다면
    게임 플레이 관련 클래스를 추가할때마다 네트워크 코드를 수정해야한다. 또한, 네트워크 유닛을 테스트 할때 전체 게임 플레이 유닛을 같이 로딩해야한다.

  2. 클래스 식별자를 해당 클래스의 객체 생성용 함수에 매핑하는 식의 객체 생성 레지스트리를 생성한다.
    네트워크 모듈은 이 레지스트리를 사용해 생성 함수를 id로 찾고, 찾은 함수를 이용해 원하는 객체를 생성할 수 있다.
    각 클래스엔 고유 식별자를 정적 상수 kClassId를 통해 저장한다.
    GameObject클래스에 GetClassId() 가상함수를 추가한 후,
    각 서브클래스는 이 함수를 오버라이드해 자신의 식별자를 리턴하는 식이다.
    그 후, CreateInstance()라는 스태틱함수를 서브클래스마다 추가하여 자신의 객체를 새로 생성해 리턴하게 한다.

  3. 객체의 갯수를 계속 늘리게 되면 , 월드의 사이즈가 커져 한 패킷에 월드의 상태가 다 안 들어간다.
    해결책으론 각 객체를 전부 패킷에 담는 대신
    객체의 변화량(델타)만 기록해서 전달하는 방식이다.
    객체의 생성, 변화, 파괴를 enum값으로 두고 , 전달하여
    해당 enum값을 읽고 그 다음으로 수신한 정보에 맞게
    수신 호스트가 처리하는 식으로 구현하면 된다.

  4. RPC란 remote procedure call의 약자로 원격 프로시져 호출이라고 한다. RPC는 한 호스트가 다른 호스트에서 특정 프로시져가 원격 수행하게 하는 행위다.
    RMI는 remote method invocation의 약자로 원격 메서드 호출이라고 한다. RMI는 원격 프로시져 호출과 비슷하지만 RPC처럼 전역 함수를 호출하지 않고 특정 객체의 메소드를 호출할 때 사용한다.

profile
코딩 창고!

0개의 댓글