이슈토론/의견 게시판

전체보기

모바일 상단 메뉴

본문 페이지

[칼럼] 위치렉에 관한 이야기. (스압)

아이콘 버피
댓글: 13 개
조회: 1387
추천: 18
2015-12-20 08:54:46

 

원래는 섭게에만 올릴까 하다가...

 

이슈토론/의견 게시판에 칼럼 카테고리가 있길래 올려봄 ^ㅅ^b

 

 

 

우선 위치렉에 관한 얘기를 시작하려면 빼놓을 수 없는 얘기가 있음.

 

맵은 드럽게 넓은데, 심지어 심리스 월드다!

 

심리스 월드라는것이 결국 위치렉의 절반 이상은 먹고 들어가는 요인임.

 

스압 글 읽기 싫은 사람들을 위한 한줄 요약!

 

심리스 월드 방식이라서 플레이어와 서버간의 통신이 너무 자주 일어난다. 그렇기 때문에 서버가 무진장 바쁘고, 그래서 위치렉이 발생한다는 것.

 

뭐 솔직히 여기까진 대부분 아는 내용일거고... 더 궁금한 사람은 스압이긴 해도 쭉쭉 읽어보길.

 

 

/// 심리스 방식에 대한 설명. 자세히 안 궁금하면 그냥 심리스 방식 때문이구나 하고 넘어가도 됌

 

심리스 방식은 다들 알겠지만, 접속하고 나서 로딩하는 도중에 모든 맵 정보를 로딩하는게 아니라

 

플레이어의 좌표를 일정 시간마다 받은 다음, 플레이어가 볼 수 있어야 하는 맵의 크기를 계산해서

 

로딩해야 할 맵 정보 패킷을 쏴줌. 

 

그럼 클라에서 맵 정보 패킷을 받은 만큼 로딩시켜주는 방식임.

 

이런 방식이라서, 플레이어들이 아무것도 안하고 걷기만 해도 서버와 클라가 통신하는 패킷량이 장난이 아닐거임.

 

//////////////////

 

/// 통신 방식에 대한 설명. 자세히 안 궁금하면 그냥 그렇구나 하고 넘어가도 됌

 

그리고 우리가 플레이하고 있는 이 클라이언트라는건, 멀티 게임인 이상 서버가 없으면 아무것도 못하게 되어있음.

아무리 WASD를 눌러도 이동도 안할거고, 채팅창에 김대일 욕을 해도 채팅도 안쳐질거고, 버그로 블랙스톤 1000개가 눈앞에 있어서 룻을 해도 인벤에 안들어올거임

 

간단하게 플레이어가 이동할 때 일어나는 처리를 써보면

 

1. 플레이어가 W를 누른다

 

2-1. 동시에 서버에 유저가 W를 입력했다는걸 전달 (뭐 현재 좌표라던지, 얼만큼 이동해야 하는지, 방향, 스피드 등)

 

2-2. 클라이언트에서 일단 플레이어를 이동시켜놓음

 

2-3. 여러가지 체크를 한 뒤에 (속도가 비정상적이진 않은지, 미공개 지역인지 등) 서버에서 계산한 좌표를 클라이언트와, 이동한 플레이어를 볼 수 있는, 즉 근처에 있는 클라이언트들한테도 보내줌

 

3. 서버에서 받은 좌표가 내가 이동한 좌표와 동일하다면 그대로 둠. 이동 성공. 

 

(사실 이 1~3번을 잘 읽어보면 위치렉이 왜 발생하는가? 에 대한 해답을 얻을 수 있음)

 

//////////////////

 

/// 위치렉에 대한 자세한 설명. 자세히 안 궁금하면 그냥 그렇구나 하고 넘어가도 됌

 

위에 적은걸 잘 읽었다면, 해답은 못찾았어도 단서 정도는 찾았을거임.

 

키 포인트는 바로 나, 다른 플레이어, 서버 이 세명의 통신관계임.

 

일단 '나'는 하늘이 무너지든, 대일이형이 교통사고를 당하든 어쨌든간에! 내가 이동을 했으면 일단은 무조건 내 클라이언트에는 움직이는 모습을 보여줌.

 

(보통 상대방이 "아 위치렉 ㅡㅡ"이라고 할 때 "나는 정상적인 이동을 했는데?" 라고 억울해 하는 이유가 이 부분 때문임)

 

간단한 한 가지 예시를 들어봄.

 

1. 플레이어 A가 앞으로 300만큼 이동. 근처에는 A의 변화를 볼 수 있는 B, C가 있음

 

2. 플레이어 A가 이동한만큼 서버에 전달

 

3. 서버 렉때문에 플레이어 A의 이동 관련 패킷을 B, C에게 실시간으로 전달하지 못하고 레이턴시 발생

 

4. 그래도 일단 들어온 패킷은 전부 보내줘야 하는게 쉽게 말해 '규칙'이다보니, 일정 시간 후에 한번에 묶어서 전송

 

5. 플레이어 A의 클라이언트는 중간중간의 패킷이 묶어서 왔든 어쨌든간에 최종 이동 좌표가 동일하니까 이동 성공.

 

6. 하지만 B, C가 보기에는 플레이어 A가 좌표 300만큼을 '워프' 한 것처럼 보임. 왜냐하면 플레이어 B, C는 플레이어 A의 위치 변화를 실시간으로 동기화 받지 못하고, 최종 이동 좌표만 받았기 때문.

 

 

이걸 PVP에 적용시켜서 보면?

 

 

- 자이언트 시점 -                                           

 

1. 소서러와 PVP 하는 중

 

2. 내 앞에 소서러가 딱 서있음. 잡기 시도

 

3. 상대 위치가 비정상적이라고 뜸

 

- 소서러 시점 -

 

1. 자이언트와 PVP 하는 중

 

2. 자이언트 앞에 있다가 밤까 써서 뒤로 뺌

 

3. 자이언트가 허공에 잡기함 ㅋㅋ ㅄ

 

- 이 때 서버에서 일어나는 일들 -

 

1. 자이언트 클라이언트와 소서러 클라이언트가 있음

 

2. 소서러가 밤까 써서 뒤로 갔으니 위치를 동기화 시켜달라는 요청을 받음

 

3. 서버에서 위치를 계산해서 근처에 있는 클라이언트들에게 소서러가 이동한 좌표를 보내줘야 함

 

4. 근데 서버에 렉이 좀 있어서 계산은 끝내놓고 클라이언트들에게 보내는 처리가 늦어버림

 

5. 이 때 동기화를 받지 못해서 소서러가 자기 앞에 있는걸로 보이는 자이언트로 부터 잡기 스킬 판정 요청을 받음

 

6. 서버가 잡기 범위에 적이 있는지 열심히 계산

 

7. 이미 소서러는 밤까를 쓴 상태라서, "이 새끼 허공에 잡기쓰네" 라고 생각하고 잡기 실패 판단 보냄

 

8. 일정시간의 레이턴시 후에 자이언트는 위치가 비정상적이라는 메시지와 함께, 이제서야 소서러가 멀리 이동한걸 보게됨

 

9. 현재 위치와 최종 이동 좌표가 같은 소서러 클라이언트는 이동 성공으로 처리, 자이언트가 허공에 잡기하는걸 보고 비웃음

 

이 반대로 자기는 분명히 피했는데 저 새끼한테 왜 잡히지? 이것도 마찬가지임.

 

그저 처리 순서가 다를 뿐이지.

 

1. 자이언트는 소서러가 앞에 있길래 잡기 스킬을 사용해서 서버에 판정 요청을 보냄

 

2. 서버는 소서러가 앞에 있어서 OK 판정을 내림. 근데 또 서버에 렉 때문에 바로 보내지 못하고 레이턴시 발생 

 

3. 소서러 클라이언트에는 잡기를 당했다는 정보가 동기화가 안되었으니 아직 자기가 잡힌지 모름

 

4. 자이언트가 앞에 있으니 피하려고 황급히 밤까를 쓰고, 서버에 요청을 보냄

 

5. 요청을 받은 서버는 "어라? 얜 이미 잡힌 상태인 플레이어인데 스킬을 쓰네?" 하면서 밤까 요청을 취소시킴

 

6. 일정시간의 레이턴시 후에 소서러 플레이어는 밤까를 썼음에도 불구하고 잡혀있는 자신을 보게 됌. 자이언트는 소서러가 왜 위치렉이라고 빼액대는지 이해 못하면서 비웃음

 

그리고 이 문제는 꼭 서버에 렉이 걸리지 않은 상황에서도 발생함.

 

클라이언트와 서버의 짧은 동기화 시간 사이에 스킬을 쓰거나 하면 발생하는거지.

 

예를들면 클라이언트와 서버의 동기화 시간이 0.5초인데,

 

그 0.5초 사이에 서로 잡기와 밤까를 쓴다던가...

 

새벽 시간인데다가 사람도 없는데도 가끔 위치렉이 생기는게 이때문임.

 

//////////////////

 

 

뭐 결론은... 레이턴시 라는걸 줄이면서, 클라이언트와 서버의 동기화 시간을 최대한으로 짧게 해주는 수 밖에 없음

 

문제는 이게 무진장 힘들고 거의 불가능 하다는거지.

 

솔직히 개발자 자존심에 유저들 앞에서 "아직은 기술력 문제때문에..." 라고 말하기가 쉽질 않음.

 

근데 정말 이건 안되겠다 싶으니까 간담회에서 그렇게 말한거고...

 

 

레이턴시를 줄이려면 엄청나게 좋은 서버를 써야 할건데... 

 

심리스 MMORPG를 구동하면서도 레이턴시가 전~혀 발생하지 않는 서버가 존재하는지도 의문이고

 

1000명의 클라이언트가 한번에 요청을 보냈음. 뭐 누구는 밤까를 썼다 누구는 잡기를 썼다 누구는 작열을 썼다 등등..

 

근데 이 1000명에게 아주 빠른 시간에, 누가 먼저 요청했든 상관 없이 모두 같은 시간에 응답을 보내줄 수 있을까?

 

당연히 동기화 시간이 조금씩 늦어지겠지...

 

 

난 MMORPG 개발자도 아닌데다가 이제 갓 게임업계에 발들인 신입이라서

 

뭐 위치렉을 완전히 없앨 수 있는 베테랑들만의 노하우가 있는데 내가 모르는걸 수도 있는데...

 

내 머리로는 아무리 생각해봐도 아직 없는거같은데...

 

검은사막 유저들이 1인당 100만원 이상씩 후원해주면 될지도 모르겠다 ^3^;

 

 

추가로 이거 읽어보고나서 게임서버에 관해 흥미가 생긴 사람들은

 

http://www.inven.co.kr/webzine/news/?news=42411

 

이거 보면 괜찮을듯. 인벤 특집기사인데 내용이 괜찮음

 

Lv82 버피

모바일 게시판 하단버튼

댓글

새로고침
새로고침

모바일 게시판 하단버튼

지금 뜨는 인벤

더보기+

모바일 게시판 리스트

모바일 게시판 하단버튼

글쓰기

모바일 게시판 페이징

최근 HOT한 콘텐츠

  • 검사
  • 게임
  • IT
  • 유머
  • 연예