작성
·
286
1
더미 클라 1000대로 설정하고 1000 players 접속 완료 후
유니티로 접속하면
아래 같이 Login Ok 까지 진행되고 화면에 아무것도 생성이 안됩니다.
아무리 오래 기다려도 변화가 없는데 단순히 렉인걸까요?
동시에 다른 작업은 너무 잘됩니다.
답변 5
2
Job이 밀리는 문제는 디버깅으로 잡기보다는
로그로 잡는 쪽이 더 편합니다.
Job이 밀리는 이유는 말 그대로
단일 쓰레드가 혼자 처리하는 양보다
일감이 쌓이는 속도가 더 빠르기 때문입니다.
따라서 현재 남은 일감 개수를 (ex. 전역 변수로 관리하면서) 로그로 찍어보면
일감이 밀리는지 아닌지 확인할 수 있겠죠.
마찬가지로 SendQueue에다가도 각 세션마다 보낼 패킷 정보를 쌓아두고 있는데,
이 또한 너무 많이 쌓이면
상대방에 Recv를 못한다거나,
내가 과하게 보냈다거나 둘 중 한 상황입니다.
보통 Recv/Send 패킷량도 확인하면서
너무 말도 안되게 쌓이는 경우는
그냥 접속을 끊어주는 경우가 많습니다.
아무튼 BBAKK님 컴퓨터에서는
대략적으로 '한 방'에 500명 선이 한계라고 판단하시면 되는데
그 정도면 절대 적은 수치가 아닙니다.
그리고 Part9에서 미처 처리 안 된 부분이 조금씩 있는데,
가령 몬스터AI에서 플레이어를 서칭하는 등의 코드에서
쪼개놓은 구역을 이용해 찾는게 아니라
전체 스캔을 하는 등, 최적화 하는 부분 몇개를 누락한 기억이 있네요.
2
여러가지 이유가 있을 수 있는데
우선 패킷이 정확히 일치하는게 맞는지 테스트를 한 다음,
사람을 줄이면서 100명 이하일 때는 잘 실행되었는지를 확인해보면 됩니다.
만약 사람수를 늘리니 발생한 문제라면
네트워크 패킷 처리가 밀리거나,
컨텐츠 단 Job이 밀려서 그런 것일 수 있습니다.
추가적으로 단일 쓰레드로 단일 공간에
1000명은 몰아넣는 것은 현실적으로 매우 매우 높은 수치입니다.
2D 게임이고 연산이 많지 않다면 어떻게 처리될 수도 있지만
보통 뮤, 블소와 같이 '방' 단위로 만드는 MMO는
한 쓰레드가 처리하는 단일 공간에선 100~200명 선으로 만듭니다.
0
0
0
500명일때는 잘 됫는데 1000명부터는 안되는걸로보아 루키스님이 말씀하신 그런 현상이 일어난게 아닌가하고 이리저리 뒤져보고있습니다.
Client에서 PacketHandler.S_LoginHandler 가 정상 수행되어 Server에서 Login 패킷을 받고 ItemList를 추출해서 패킷을 생성하는것 까지는 확인되는데 그 이후로 확인하려고 하면 자꾸 VS가 종료되는 오류가 발생하네요...
Job이 밀릴 수있는 경우가 어떤게 있나요?
브레이크 포인트로 디버그를 오래하다보면 Visual Studio가 자꾸 Terminate 시켜버리는 바람에 아직 갈피를 못잡고있습니다 ㅜㅜ