본문 바로가기
Work/개발 노트

클라/서버 간 통신 보간 처리 간단 요약

by ★용호★ 2016. 7. 4.

보간 처리

패킷 통신

  • P2P로 통신 하되 홀펀칭 실패 시 릴레이 서버를 통해 통신.
  • 사설ip, 공인ip, 릴레이서버ip를 활용.
    • 사설 ip와 통신 가능한지 여부 체크
    • 불가능한 경우 공인 ip와 연결 체크
    • 최후의 수단으로 릴레이 서버를 통해 통신.
  • 사설 ip는 클라이언트가 자체적으로 알아낼 수 있음. (서버 연결 시 전달하여 서버에도 알림)
  • 공인 ip는 서버와의 통신을 통해 알아낼 수 있음.
  • 릴레이서버 ip는 최초 서버와 통신 시 서버로부터 받음.
  • 슈퍼 피어를 둘 것인지 각 클라이언트마다 브로드캐스트를 수행할 것인지 고려.
    • 슈퍼피어가 클라이언트인 경우 데이터 발생률이 크기 때문에 고려해봐야함.
  • 순서가 뒤바뀌는 것을 방지하기 위해 각 패킷에는 시간 정보를 포함시킨다.
  • 아이템을 먹거나 사용하는 경우에는 손실되면 곤란함.
    • 이러한 경우에는 UDT 또는 TCP로 패킷 전달
  • 자연스러운 움직임을 위해 프레임마다 패킷을 주고 받으면 서버 부하가 심해지므로, 패킷을 받게 되는 텀을 자연스럽게 이어주도록 클라이언트에서 계산이 필요.
    • 예를들어, 30프레임을 그리기 위해서 초당 30개의 패킷을 받는 것이 좋겠지만 부하로 인해 10개로 받는다고 가정. 패킷 사이의 2프레임을 클라이언트의 계산에 의해 그려주어야 함.
    • 데드레커닝 같은 보간 방법 필요.

데드 레커닝

  • 데드(Dead)는 신호를 받지 못하고 있는 상태를 의미, 레커닝(Reckoning)은 추산한다는 의미로 신호가 없는 동안에는 추측하여 상태 정보를 갱신한다는 의미.
  • 한정된 Band Width 때문에 일반적으로 모든 프레임을 전송하지 않고, 몇몇 프레임을 무시하고 전송하는 방법을 택함.
  • 신호가 없는 상태에서 프레임 처리를 위해 데드 레커닝이 사용됨.
  • 공식 : 현재 위치 = 이전 위치 + (속도 시간) + (1/2 가속도 * 시간 ^2)
    • 신호가 없는 동안의 현재 위치를 추측 할 수 있음.
  • 다음 신호가 오면 해당 위치로 이동.
  • 신호가 오지 않을 경우 현재 위치와 추측 위치를 조합하여 이동 처리.
  • 클라이언트에서 이를 계산하는 방법과 서버/클라이언트 양쪽에서 계산하는 방법이있다.

참고

댓글