인프런 커뮤니티 질문&답변

BBAKK님의 프로필 이미지
BBAKK

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)

DummyClient #2

클라 로그인 관련

작성

·

286

1

더미 클라 1000대로 설정하고 1000 players 접속 완료 후

유니티로 접속하면

아래 같이  Login Ok 까지 진행되고 화면에 아무것도 생성이 안됩니다.

아무리 오래 기다려도 변화가 없는데 단순히 렉인걸까요?

동시에 다른 작업은 너무 잘됩니다.

답변 5

2

Rookiss님의 프로필 이미지
Rookiss
지식공유자

Job이 밀리는 문제는 디버깅으로 잡기보다는
로그로 잡는 쪽이 더 편합니다.

Job이 밀리는 이유는 말 그대로
단일 쓰레드가 혼자 처리하는 양보다
일감이 쌓이는 속도가 더 빠르기 때문입니다.
따라서 현재 남은 일감 개수를 (ex. 전역 변수로 관리하면서) 로그로 찍어보면
일감이 밀리는지 아닌지 확인할 수 있겠죠.

마찬가지로 SendQueue에다가도 각 세션마다 보낼 패킷 정보를 쌓아두고 있는데, 
이 또한 너무 많이 쌓이면
상대방에 Recv를 못한다거나,
내가 과하게 보냈다거나 둘 중 한 상황입니다.
보통 Recv/Send 패킷량도 확인하면서
너무 말도 안되게 쌓이는 경우는
그냥 접속을 끊어주는 경우가 많습니다.

아무튼 BBAKK님 컴퓨터에서는
대략적으로 '한 방'에 500명 선이 한계라고 판단하시면 되는데
그 정도면 절대 적은 수치가 아닙니다.
그리고 Part9에서 미처 처리 안 된 부분이 조금씩 있는데,
가령 몬스터AI에서 플레이어를 서칭하는 등의 코드에서
쪼개놓은 구역을 이용해 찾는게 아니라
전체 스캔을 하는 등, 최적화 하는 부분 몇개를 누락한 기억이 있네요.

2

Rookiss님의 프로필 이미지
Rookiss
지식공유자

여러가지 이유가 있을 수 있는데 
우선 패킷이 정확히 일치하는게 맞는지 테스트를 한 다음,
사람을 줄이면서 100명 이하일 때는 잘 실행되었는지를 확인해보면 됩니다.

만약 사람수를 늘리니 발생한 문제라면
네트워크 패킷 처리가 밀리거나,
컨텐츠 단 Job이 밀려서 그런 것일 수 있습니다.

추가적으로 단일 쓰레드로 단일 공간에
1000명은 몰아넣는 것은 현실적으로 매우 매우 높은 수치입니다.
2D 게임이고 연산이 많지 않다면 어떻게 처리될 수도 있지만
보통 뮤, 블소와 같이 '방' 단위로 만드는 MMO는
한 쓰레드가 처리하는 단일 공간에선 100~200명 선으로 만듭니다.

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

https://www.inflearn.com/questions/175000

추가 히스토리 남깁니다.

0

BBAKK님의 프로필 이미지
BBAKK
질문자

Rookiss님 수준 낮은 질문에 다 답변 달아주셔서 넘 감사드립니다 ㅜㅜ

좋은 강의 올려주셔서 정말 감사드립니다.

언리얼 강의도 곧 수강할게요!!

0

BBAKK님의 프로필 이미지
BBAKK
질문자

500명일때는 잘 됫는데 1000명부터는 안되는걸로보아 루키스님이 말씀하신 그런 현상이 일어난게 아닌가하고 이리저리 뒤져보고있습니다.

Client에서 PacketHandler.S_LoginHandler 가 정상 수행되어 Server에서 Login 패킷을 받고 ItemList를 추출해서 패킷을 생성하는것 까지는 확인되는데 그 이후로 확인하려고 하면 자꾸 VS가 종료되는 오류가 발생하네요...

Job이 밀릴 수있는 경우가 어떤게 있나요? 

브레이크 포인트로 디버그를 오래하다보면 Visual Studio가 자꾸 Terminate 시켜버리는 바람에 아직 갈피를 못잡고있습니다 ㅜㅜ

BBAKK님의 프로필 이미지
BBAKK

작성한 질문수

질문하기