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

bs Jeon님의 프로필 이미지
bs Jeon

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

스킬 #1

스레드 관련 문의드립니다

작성

·

180

0

수업 중 C_MoveHandler에서 멀티 스레드 환경에서 clientSession.MyPlayer와 GameRoom에 대한 방어코드가 필요하다고 설명을 해주셨는데요.

수업에 사용되고 있는 시점의 코드와 테스트 환경에서는 멀티스레드에 의하여 하나의 client session에서 C_MoveHandler을 수행하는 시점에  MyPlayer나 Myplayer가 가르키고 있던 Room을 지우는( session disconnect처리) 경우는 OnSendCompleted(다른 client session에서 요청한 broad cast 메시지 처리 중 에러 발생 케이스)함수에서의 문제 발생에 의한 예외 처리(disconnect) 시점에서만 발생할 수 있다고 생각되는 데 이외에 생각할 수 있는 조건이 있을까요?

( 각 client session별로  session disconnect가 이뤄 지는 곳은 Receive Thread나 Send Thread인데 Receive Thread의 경우 해당 client의 C_MoveHandler를 실행하는 주체이기 때문에 멀티스레드에 의해 해당 client의 정보를 수정하게 될 수 있는 곳은 Send를 처리하는 thread밖에 없을 것 같아서요.)

답변 1

0

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

물론 [수업에 사용되는 시점]의 코드에서는 Room 제거하는 경우가 많이 없지만,
나중에 가면 게임 사양이나 해킹 의심 등으로 킥 하는 등
Room에서 쫓아내는 부분이 더 많이 추가될 수 있으니
하는 김에 미리 챙기는 것이 여러모로 좋습니다.

bs Jeon님의 프로필 이미지
bs Jeon

작성한 질문수

질문하기