버그 해결을 위한 모든 질문을 던져
0 votes
299 views
안녕하세요.. 턴제 게임을 개발중에 있는데요

턴제 게임 플레이중 최대 5인이 한턴씩 플레이를 하는데요

유독 특정 모바일 기기 WIFI 환경에서만 패킷이 늦게 뭉쳐서(?) 수신되는 현상이 발생합니다.

 

A, B, C 유저가 플레이중일때

C유저가 문제 기기의 유저라고 한다면, A ~ C 순으로 플레이할때, C는 A~B 가 한 액션을 뒤늦게 한꺼번에 수신합니다.

A턴 플레이 -> 행동내역 브로드캐스팅 -> B턴 플레이 -> 행동내역 브로드캐스팅 -> C턴 플레이

 

C입장에서는, A의 행동과 B의 행동을 동시에 받아서 처리하여 턴이 후두둑 지나가는 거 처럼 보이고

A나 B의 입장에서는 C가 행동하길 기다리고 있는 상황입니다.

 

패킷 송수신 및 핸들링 타이밍 로그를 찍어봤을때 각 클라 및 서버는 send는 정상적으로 수행하였고

C클라만 한번의 소켓 recv에서 두개의 패킷이 동시(A행동, B행동 - 둘의 행동이 최소 0.25초 이상은 차이납니다.)에 수신되고 있습니다.

nagle이 의심되나 모두 off상태입니다. ( TCP_NODELAY on 상태 )

C기기에서만 WIFI 상태에서 유독 잘 발생합니다.. 다른 기기에서도 간헐적으로 발생하긴 합니다.

 

이상황에서 뭐를 의심해 봐야 할까요???
asked (28 point) , 299 views
tcp는 어쩔수 없고 유디피로 구현하셔야 할듯합니다.

3 answers

+1 vote
우수 답변
2015년도에 인디 팀에서 턴제 1:1 배틀 게임을 만들었던 적이 있는데,

그당시에 저 또한 사양이 다른 여러 디바이스에서 테스트를 했을 때 특정 디바이스에서 뭉쳐서 오던 경우가 있었습니다.

원인은 두 가지였는데

첫째로, LTE 로 접속했던 단말기 (LG G3), LTE 신호가 약한 상태 (안테나 2칸급)

-> 잘터지는곳 가서 테스트하니 매우 잘되었었습니다.

 

둘째로는 정말 의외였던 사항인데....

사양이 낮은 단말기의 Wifi 모드 (갤럭시 S2) . 기기 자체의 렉 때문에 3G 모드일때는 50~200ms ping이였던게 와이파이일떄는 200~3000ms 정도의 핑이 발생하고 패킷이 뭉쳐오기 일쑤였습니다.

 

다른 사양이 낮은 테스트 단말기가 없어서 더 테스트는 못한 관계로 추측할수 있는 사항은

1. 사양이 낮은거 자체일수도 있고,

2. 특정 통신 칩셋에서의 Wifi 모드 문제

정도로 추측되었습니다.

 

기기 자체의 문제가 있었던 경우도 있었던 사례도 있었다 정도도 참고하시면 되겠습니다.

 

혹시 몰라 다른 테스트 장비들 목록을 써놓겠습니다.

- LG G3

- 삼성 겔럭시 S2 (문제)

- 삼성 갤럭시 S4

- 구글 넥서스 7 2세대 태블릿

- 아이뮤즈 μPad 8
answered (212 point)
선택됨
답변감사드립니다.

현재 최저로 잡고 있는 사양이 갤럭시 s4급인데

s4에서는 매우 잘돌아갑니다.

문제가 되는 특정 기기는 갤럭시 s6이며, 이 한 기기만 사내 와이파이 망에서 매우 자주 발생하고 있습니다.

 

해당 기기로 여기저기서 테스트를 더 해 본결과.. 유독 사내 와이파이 망에서만 문제가 발생하고 있네요;;

일단은 내부 와이파이 망과 이 기기가 궁합이 안맞는다라고 넘어가려고는 하고 있습니다..

어찌됐든 네트워크 상황에 따라 발생할 수 있는 현상이므로.. 이에 대해 클라 연출적으로 대처를 하려고 합니다.
0 votes
일단...

원래 그렇습니다.  망 상태, IO에 따라 패킷은 합쳐지기도, 나눠지기도 합니다.

즉,,패킷을 보내는 시간만으로는 동기화 할 수가 없습니다.
answered (132 point)
동기화는 딱히 상관은 없습니다.

 

다만 C가 패킷수신을 늦게 하는만큼 C의 턴도 늦게 돌아오고, C의 행동도 늦어지고 있어서

 A, B의 입장에서는 C행동의 대기 시간이 실제보다 더 길어지고 있는게 문제입니다.
0 votes
턴제라면 A의 패킷을 송신수 B,C의 응답이 올때까지 대기한후

모든 플레이어의 응답이 오면 A의 행동이 발생 되도록 설계하는 것은 어떨까요?

각 플레이어의 핑 처럼 지연 시간 체크를 해서 어떤 유저가 늦어지는지 너무 늦어지면 재접속을 권장한다거나 등을 시켜주고요
answered (17 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

211 질문
329 answers
348 댓글
342 users