• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

EC2 서버 패킷 이슈

23.05.25 23:59 작성 조회수 246

0

안녕하세요 루키스님!

저는 강의에서와 달리 움직임 방식을 int 단위가 아닌 float 단위로 움직일 때마다 C_Move 패킷을 보내게 설계했습니다(아마 이러면 패킷을 쏘는 양이 더 많을 것 같아요!)

해당 로직을 로컬 서버에서 작동을 시키고 클라이언트를 저의 로컬 ip에 접속하게 하면 패킷이 밀림 없이 잘 동작하지만 ec2에 서버를 올리고 클라를 ec2 IP에 접속 시키고 동작시키면 패킷이 밀려서 그런진 몰라도 플레이어가 이동하다가 트레이서 현상이 발생합니다. 총알을 쏘면 트레이서를 하지는 않지만 버벅거리면서 나가구요.

기본적으로 Move 로직이 강의와 마찬가지로 클라에서 움직이고 서버에 위치를 통보하는 방식입니다. 이 방식이 패킷이 밀림으로써 클라는 나가 있지만 서버에서의 반영으로 인해 위치가 다시 트레이서 되는 건가 보다 싶어서

움직임 로직을 바꿨습니다. 클라에서 움직인다고 인풋을 주면 패킷을 서버로 보내고 서버에서 움직임을 바꾼 후에 클라에 반영이 되게 바꿔봤습니다! 하지만 이 방식도 로컬에선 잘 동작하지만 ec2 서버에서는 버벅거리더라구요...

ec2 인스턴스의 유형을 높은 걸로 해도 똑같고 최적화를 많이 했다고 생각했는데도 계속 버벅거리네요... 혹시 방법이 있을까요... 차이는 로컬 서버냐 ec2 서버냐의 차이인거 같은데, 애초에 물리적인 거리가 있기 때문에 이런걸까요...

답변 1

답변을 작성해보세요.

0

원격에 띄우면 반응 속도가 느려지는데, 그러면 발생하는 문제로 보이네요.
로컬에서도 동일하게 테스트를 하기 위해 서버에 패킷을 받을 때
일부로 0.5초 후에 처리한다거나 하는 식으로 코드를 만들어보시고
그래도 클라에서 잘 돌아가게 만들어주시면 됩니다.

그리고 float 단위라고 해도 움직일 때마다 보내면 안 됩니다.
미세하게 움직일 때는 방향이 급격히 바뀌거나 0.25초 정도마다 보내거나
일종의 규칙이 필요합니다.
이전 게임에선 바로 앞 방향을 목표 지점으로 찍어서 그 지점으로 이동하겠다는 의사를 서버에 보내곤 했습니다.